zoukankan      html  css  js  c++  java
  • 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);

    参考链接

    如果觉得本文内容有帮助:试试我开发的Android应用 应用计时折扣君推荐+1(需登录)

  • 相关阅读:
    pandas:由列层次化索引延伸的一些思考
    机器学习中的异常检测手段
    GBDT+LR算法解析及Python实现
    模型性能提升操作
    /usr/bin/python: can't decompress data; zlib not available 的异常处理
    FM算法解析及Python实现
    vue项目中的iview如何验证for循环的输入框、日期选择框,及表单回填验证不通过问题
    JavaScript的数组方法(array)
    Js中toFixed()方法保留小数不精准的问题
    vscode中iview的</Col>标签报错问题
  • 原文地址:https://www.cnblogs.com/bjzhanghao/p/1394275.html
Copyright © 2011-2022 走看看