JSF开发问题和解决
创始人
2024-04-07 15:41:20
0

1.在里的的action不执行

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

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

检查faces-config.xml里,如果页面被包含的话,则可能应为"/*",而不是如"/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如下所示:

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

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

4、从session里删除一个bean

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

【编辑推荐】

  1. JSF理解组件和客户端标识符
  2. 过渡技术的Ajax及Apusic JSF
  3. ESRI为什么选择JSF
  4. 浅析对JSF项目的单元测试
  5. 构建Ajax JSF事件驱动

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...