Jsf #{bean.function}和#{bean.function()}之间的区别是什么?

Jsf #{bean.function}和#{bean.function()}之间的区别是什么?,jsf,jsf-2,navigation,Jsf,Jsf 2,Navigation,我是JSF新手。我想知道JSF/导航规则的一点。我有四个页面,索引,p1,p2,p3。当我试图用action=“#{bean.gotoP1()}”导航到一个页面时,它会给出这样的错误 “对于结果为“成功”的操作“#{bean.gotoP1()}”,找不到从视图id为“/index.xhtml”的匹配导航案例” 我的问题很简单;为什么我不能使用#{bean.gotoP1()}导航,并且必须删除括号#{bean.gotoP1} 我的代码如下 index.xhtml <h:body>

我是JSF新手。我想知道JSF/导航规则的一点。我有四个页面,索引,p1,p2,p3。当我试图用action=“#{bean.gotoP1()}”导航到一个页面时,它会给出这样的错误

“对于结果为“成功”的操作“#{bean.gotoP1()}”,找不到从视图id为“/index.xhtml”的匹配导航案例”

我的问题很简单;为什么我不能使用#{bean.gotoP1()}导航,并且必须删除括号#{bean.gotoP1}

我的代码如下

index.xhtml

<h:body>    
    <h:form>
        <h:commandButton action="#{mybean.gotoP1()}" value="P1"/>
        <h:commandButton action="#{mybean.gotoP2()}" value="P2"/>
        <h:commandButton action="#{mybean.gotoP3()}" value="P3"/>
    </h:form>
</h:body>
faces-config.xml

<navigation-rule>
    <from-view-id>/index.xhtml</from-view-id>

    <navigation-case>
        <from-action>#{mybean.gotoP1}</from-action>
        <from-outcome>success</from-outcome>
        <to-view-id>/p1.xhtml</to-view-id>
    </navigation-case>

    <navigation-case>
        <from-action>#{mybean.gotoP2}</from-action>
        <from-outcome>success</from-outcome>
        <to-view-id>/p2.xhtml</to-view-id>
    </navigation-case>

    <navigation-case>
        <from-action>#{mybean.gotoP3}</from-action>
        <from-outcome>positive</from-outcome>
        <to-view-id>/p3.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>

/index.xhtml
#{mybean.gotoP1}
成功
/p1.xhtml
#{mybean.gotoP2}
成功
/p2.xhtml
#{mybean.gotoP3}
积极的
/p3.xhtml
谢谢

我的问题很简单;为什么我不能使用#{bean.gotoP1()}导航,并且必须删除括号#{bean.gotoP1}

因为EL语法与导航用例不匹配。您在导航案例中的操作中定义了
{bean.gotoP1}
,而不是
{bean.gotoP1()}
。就这么简单

那些没有参数的括号实际上是不必要的。自从EL 2.2推出以来,它们就开始在JSF页面上传播,因为一般具有EL 2.2意识的IDE认为自己比现在更聪明,并且不必要地用括号和全部自动完成方法表达式,这让JSF初学者误以为它们是实际需要的。我甚至看到一些代码片段是从实际使用
{bean.getProperty()}
而不是
{bean.property}
来输出属性的初学者那里产生的,当在输入组件中使用时,输出属性会失败,并出现
javax.el.propertynotwriteableexception

把那些没有论据的括号删掉。这种语法在JSF中不是必需的和“正常的”。此外,导航规则非常符合JSF 1.x-ish。另外,使用POST请求执行导航非常符合JSF 1.x-ish。也许你只是在学习和玩耍。没关系,但要了解正确的方法和一点历史,请仔细阅读以下链接:


最后但并非最不重要的一点是,这是一个很好的起点。

谢谢@BalusC,我会关注你的评论,链接。我想成为JSF方面的专家,这是我的第一步。
<navigation-rule>
    <from-view-id>/index.xhtml</from-view-id>

    <navigation-case>
        <from-action>#{mybean.gotoP1}</from-action>
        <from-outcome>success</from-outcome>
        <to-view-id>/p1.xhtml</to-view-id>
    </navigation-case>

    <navigation-case>
        <from-action>#{mybean.gotoP2}</from-action>
        <from-outcome>success</from-outcome>
        <to-view-id>/p2.xhtml</to-view-id>
    </navigation-case>

    <navigation-case>
        <from-action>#{mybean.gotoP3}</from-action>
        <from-outcome>positive</from-outcome>
        <to-view-id>/p3.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>