2014-11-25 37 views
1

是什么在jsf中使用括号和没有括号的回调bean方法之间的区别?

<h:commandLink actionListener="#{serviceProviderBean.method}" value="Save" /> 

<h:commandLink actionListener="#{serviceProviderBean.method()}" value="Save" /> 

之间的差都调用相同的方法或任何错误在上面的代码

+0

如果两者都能正常工作...... :)我认为它涉及到使用的EL分析器版本。早期版本不支持使用大括号调用方法,并尝试将“方法”解析为get或set方法。如果我记得正确(例如表中的当前对象),也可以将参数添加到大括号中。 – wemu 2014-11-25 07:50:22

+0

如何知道EL分析器版本? – 2014-11-25 07:52:24

+0

它是应用程序服务器/ servlet容器/ tomcat /东西的一部分。对于tomcat,EL spec版本在此处列出:http://tomcat.apache.org/whichversion.html - EL分析器可以重新配置。在大括号正式进入EL规范之前,JBoss EL相当有名。 – wemu 2014-11-25 08:18:47

回答

0

二不会在tomcat6中工作,这将与tomcat7工作/ JSF2

0

两者都是优良。第二个被用于传递PARAMS像

<h:commandLink actionListener="#{serviceProviderBean.save(someBean.someOption)}" 
    value="Save" /> 
0

我想你也必须使用方法牙套,当你想使用返回一个布尔值的方法,但是没有在bean中定义匹配的属性。

我今天有这种情况。 我的xhtml页面有<h:panelGroup ...>rendered="#{bean.isLoggedIn}"属性。 isLoggedIn方法调用边界的方法,因此该bean没有匹配的属性private boolean isLoggedIn。 由于缺失属性,我得到了一个异常。 将大括号添加到呈现的属性中,使其成为rendered="#{bean.isLoggedIn()}"它正常工作。

无论如何。该方法现在被删除,因为我的bean不应该做业务逻辑的东西:D

+0

你在这里遇到了错字和/或误解。 maching属性是'private boolean loggedIn',而不是'isLoggedIn'。然而,你的观点是错误的。它只是归结为EL分析器版本。例如,我可以自由使用'#{bean.searchPerson}',而那些属性不是。这是一个没有任何参数的方法。 – alexander 2016-06-27 06:45:51

相关问题