提问者:小点点

#{bean. Func}和#{bean.Func()}有什么区别?


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

"无法使用from-view-id'/index. xhtml'找到匹配的导航案例,用于操作'#{bean.gotoP1()}',结果'成功'"

我的问题很简单;为什么我不能使用#{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>

mybean.java

@ManagedBean
@RequestScoped
public class Mybean implements Serializable{

    private static final long serialVersionUID=1L;

    public Mybean() {
    }

    public String gotoP1(){
        return "success";
    }

    public String gotoP2(){
        return "success";
    }

    public String gotoP3(){
        return "positive";
    }
}

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>

谢谢……


共1个答案

匿名用户

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

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

这些无争议的括号实际上是不必要的。自从EL 2.2引入以来,它们开始在JSF页面上传播,因为普通的EL 2.2感知IDE认为比它更聪明,并且不必要地自动完成带有括号的方法表达式,令人困惑地使JSF启动器认为它们实际上是必需的。我甚至看到了来自启动器的代码片段,他们实际使用#{bean. getProperty()}而不是#{bean.property}来输出属性,然后在输入组件中使用javax.el.Property tyNotWritableException时会失败。

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

  • 在EL
  • 中调用直接方法或带有参数/变量/参数的方法
  • action和actionListener之间的区别
  • JSF隐式与显式导航
  • 如何在JSF中导航?如何使URL反映当前页面(而不是上一页)
  • JSPEL、JSF EL和统一EL的区别

最后但同样重要的是,我们的JSF wiki页面是一个很好的起点。