JSF开发问题和解决

简介:

1、在<f:subview>里的<h:commandLink>的action不执行

很多时候<f:subview>是在包含页面的情况下被用到(例如包含一个导航页面),而被包含的页面里如果有非JSF标签(如<a>)的时候,必须额外使用<f:verbatim>包含它才不会报错。问题是<f:verbatim>包含的内容是不算在JSF的Component Tree里的,因此这里的<h:commandLink>的action就不会被执行了。解决的办法是不要在<f:verbatim>里用<h:commandLink>,即尽量全部使用JSF的标签比较不容易出问题。参考链接

2、还是在<f:subview>里,action属性的方法虽然执行了,但不能转到faces-config里定义的目标页面

检查faces-config.xml里<from-view-id>,如果页面被包含的话,则<from-view-id>可能应为"/*",而不是如"/navigatorbar.jspx"这样。

3、结合EMF使用时,页面抛出找不到属性异常“Error getting property 'xxx' from bean of type XXXX”

EMF生成的XXXImpl里的构造方法是protected修饰的,改为public即可。(注意修改@generated修饰,否则下次重新生成时会被覆盖回来)

另(不仅限于EMF的情况):如果一个Bean里有两个同名但参数不同的方法,例如Customer有getRecords()和getRecords(int year)这两个方法,则在JSF页面里用#{customer.value}会抛出同样的异常,我暂时还不确定是EL的问题还是JSF实现(我用的trinidad)的问题,部分异常stack如下所示:

严重: Servlet.service() for servlet faces threw exception
javax.faces.el.PropertyNotFoundException: Error getting property 'xxx' from bean of type XXXX
    at com.sun.faces.el.PropertyResolverImpl.getValue(PropertyResolverImpl.java:107)
    at com.sun.faces.el.impl.ArraySuffix.evaluate(ArraySuffix.java:167)
    at com.sun.faces.el.impl.ComplexValue.evaluate(ComplexValue.java:151)
    at com.sun.faces.el.impl.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:243)
    at com.sun.faces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:173)
    at com.sun.faces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:154)
    at org.apache.myfaces.trinidad.bean.FacesBeanImpl.getProperty(FacesBeanImpl.java:66)
    at org.apache.myfaces.trinidad.component.UIXComponentBase.getProperty(UIXComponentBase.java:1100)
    at org.apache.myfaces.trinidad.component.UIXIterator.getValue(UIXIterator.java:415)
    at org.apache.myfaces.trinidad.component.UIXCollection._flushCachedModel(UIXCollection.java:1127)
    at org.apache.myfaces.trinidad.component.UIXCollection.encodeBegin(UIXCollection.java:511)
    at org.apache.myfaces.trinidadinternal.uinode.UIComponentUINode._renderComponent(UIComponentUINode.java:317)
    at org.apache.myfaces.trinidadinternal.uinode.UIComponentUINode.render(UIComponentUINode.java:279)

解决的办法是把带参数的那个方法改名。 

4、从session里删除一个bean

ValueBinding binding =FacesContext.getCurrentInstance().getApplication().createValueBinding("#{MyBean}");
binding.setValue(context, null);

参考链接

本文转自博客园八进制的博客,原文链接:JSF开发问题和解决,如需转载请自行联系原博主。

相关文章
|
6月前
|
前端开发 JavaScript 开发者
深入理解MVC和MVVM:构建现代Web应用的利器
深入理解MVC和MVVM:构建现代Web应用的利器
|
12月前
|
存储 前端开发 Java
Java Web框架,如Spring MVC,是一种用于构建Web应用程序的软件框架:学生考试Web应用程序
Java Web框架,如Spring MVC,是一种用于构建Web应用程序的软件框架。它们提供了一种结构化的方法,用于处理Web请求、生成动态内容和管理Web应用程序的组件。以下是关于Java Web框架和Spring MVC的详细解释,以及如何使用Spring MVC创建一个简单的Web应用程序的示例代码。
122 0
|
Java 应用服务中间件 数据库
Web阶段:第十一章:JavaEE项目的三层架构
Web阶段:第十一章:JavaEE项目的三层架构
152 0
Web阶段:第十一章:JavaEE项目的三层架构
|
前端开发 Java 数据库连接
SpringBoot从0到实战7:web项目中框架分层
业务模块的逻辑功能设计,和DAO层一样都是先设计接口,再创建要实现的类,然后在配置文件中进行配置其实现的关联。接下来就可以在service层调用接口进行业务逻辑应用的处理。 好处:封装Service层的业务逻辑有利于业务逻辑的独立性和重复利用性。
|
开发框架 Java 关系型数据库
dwz4j企业级Java Web快速开发框架(Mybatis + SpringMVC) + jUI整合应用
dwz4j企业级Java Web快速开发框架(Mybatis + SpringMVC) + jUI整合应用
227 0
|
Web App开发 Apache
MyFaces Core v2.0.7/2.1.1 发布,JSF框架
MyFaces是 JSF (JavaServerFaces) Web框架 (JSR 127)的一个实现。JavaServer(tm) Faces Web框架是一个新的实现MVC模式的规范。 这两个版本优化了 UIComponent EventListenerWrapper ,然后就是修复了一些bug。
757 0
|
前端开发 Java 容器
Springboot Application 集成 OSGI 框架开发
Java 类加载器 启动类加载器 (Bootstrap ClassLoader) 是 Java 类加载层次中最顶层的类加载器,负责加载 JDK 中的核心类库,如:rt.jar、resources.jar、charsets.jar 等 扩展类加载器(Extension ClassLoader) 负责加载 Java 的扩展类库,默认加载 JAVA_HOME/jre/lib/ext/目下的所有 jar 应用类加载器(Application ClassLoader) 负责加载应用程序 classpath 目录下的所有 jar 和 class 文件。
2785 0
|
Java 应用服务中间件 数据安全/隐私保护

相关实验场景

更多