JSF开发问题和解决Java认证考试

文章作者 100test 发表时间 2009:07:07 21:12:36
来源 100Test.Com百考试题网


  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.UIComponent
  UINode._renderComponent(UIComponentUINode.java:317)
  at org.apache.myfaces.trinidadinternal.uinode.UIComponent
  UINode.render(UIComponentUINode.java:279)
  解决的办法是把带参数的那个方法改名。
  4、从session里删除一个bean
  ValueBinding binding = FacesContext.getCurrentInstance()
  .getApplication().createValueBinding("#{MyBean}").
  binding.setValue(context, null).

相关文章


Java软件开发中可能出现几个错误观点Java认证考试
菜鸟入门:Java语言学习六大要点Java认证考试
经验分享:我的JavaEE学习道路Java认证考试
EJB事务属性的六个关键值Java认证考试
JSF开发问题和解决Java认证考试
Spring工作原理探秘Java认证考试
Ubuntu下Java环境的搭建Java认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛