【问题标题】:JSFpage navigation fails: backing bean method is not foundJSFpage 导航失败:找不到支持 bean 方法
【发布时间】:2012-08-08 18:12:49
【问题描述】:

我有以下设置:

  • testBean.java 带有一个方法 public String getResult(),它返回 "success"

  • test.xhtml

    <h:commandLink action="#{testBean.result}" value="testlink" />
    
  • faces-config.xml中的以下导航规则:

    <navigation-rule>
    <from-view-id>/views/test.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>success</from-outcome>
        <to-view-id>/views/nextpage.xhtml</to-view-id>
        <redirect />
    </navigation-case>
    

我通过简单地将“成功”直接放入操作属性(作品)来检查导航是否正常工作。此外,将testBean.result 打印为 outputText 正确显示“成功”。

但是,当我点击链接时,我得到一个“服务器内部错误”,并且只允许重新加载页面。日志显示带有以下文本的 javax.el.MethodNotFoundException:

Method not found: com.company.project.view.TestBean@81de8.result()

我对神秘的@81de8 的来源感到困惑。这是问题的原因,只是其他地方不匹配的症状还是一些完全正常的幕后魔术?谁能弄清楚为什么 commandLink 中的调用失败,而在 outputText 中却没有?或者指出我应该检查和测试的其他事项?

提前致谢, 路易丝

编辑:Java 方法名为 getResult(不是结果),错误代码指向方法结果(不是字符串)。这些是写问题时的错误,是在一天漫长的工作结束后提出的;)对不起。

【问题讨论】:

    标签: jsf navigation facelets


    【解决方案1】:

    你没有运行你认为你正在运行的代码。

    你说你已经声明了一个

    action="#{testBean.result}"
    

    但是异常告诉你实际上运行的代码有一个

    action="#{testBean.string}"
    

    也许这是您之前尝试的结果之一,或者您打开了错误的页面?验证、清理、重建和重新部署,这个问题应该会消失。


    我不知道神秘的@81de8 来自哪里

    这只是类实例的哈希码。另见Object#toString() javadoc。当你这样做时,你会看到相同的字符串格式

    System.out.println(new TestBean());
    

    【讨论】:

    • 这是我在编写测试用例时的错误。我从一些中间测试中复制了错误消息,然后为了清楚起见我重命名了一些东西。我以为我已经检查了这个问题,但话又说回来,我写它的时候已经很晚了;)和 +1 来解释哈希码。
    • @Louise:那你在其他点上一直很粗心。无论 eljunior 建议什么都可能导致特定的“未找到方法”异常,或者您必须使用具有巨大错误的 EL 实现(但是没有人想到)。
    猜你喜欢
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    相关资源
    最近更新 更多