是什么在jsf中使用括号和没有括号的回调bean方法之间的区别?
<h:commandLink actionListener="#{serviceProviderBean.method}" value="Save" />
和
<h:commandLink actionListener="#{serviceProviderBean.method()}" value="Save" />
之间的差都调用相同的方法或任何错误在上面的代码
是什么在jsf中使用括号和没有括号的回调bean方法之间的区别?
<h:commandLink actionListener="#{serviceProviderBean.method}" value="Save" />
和
<h:commandLink actionListener="#{serviceProviderBean.method()}" value="Save" />
之间的差都调用相同的方法或任何错误在上面的代码
二不会在tomcat6中工作,这将与tomcat7工作/ JSF2
两者都是优良。第二个被用于传递PARAMS像
<h:commandLink actionListener="#{serviceProviderBean.save(someBean.someOption)}"
value="Save" />
我想你也必须使用方法与牙套,当你想使用返回一个布尔值的方法,但是没有在bean中定义匹配的属性。
我今天有这种情况。 我的xhtml页面有<h:panelGroup ...>
和rendered="#{bean.isLoggedIn}"
属性。 isLoggedIn
方法调用边界的方法,因此该bean没有匹配的属性private boolean isLoggedIn
。 由于缺失属性,我得到了一个异常。 将大括号添加到呈现的属性中,使其成为rendered="#{bean.isLoggedIn()}"
它正常工作。
无论如何。该方法现在被删除,因为我的bean不应该做业务逻辑的东西:D
你在这里遇到了错字和/或误解。 maching属性是'private boolean loggedIn',而不是'isLoggedIn'。然而,你的观点是错误的。它只是归结为EL分析器版本。例如,我可以自由使用'#{bean.searchPerson}',而那些属性不是。这是一个没有任何参数的方法。 – alexander 2016-06-27 06:45:51
如果两者都能正常工作...... :)我认为它涉及到使用的EL分析器版本。早期版本不支持使用大括号调用方法,并尝试将“方法”解析为get或set方法。如果我记得正确(例如表中的当前对象),也可以将参数添加到大括号中。 – wemu 2014-11-25 07:50:22
如何知道EL分析器版本? – 2014-11-25 07:52:24
它是应用程序服务器/ servlet容器/ tomcat /东西的一部分。对于tomcat,EL spec版本在此处列出:http://tomcat.apache.org/whichversion.html - EL分析器可以重新配置。在大括号正式进入EL规范之前,JBoss EL相当有名。 – wemu 2014-11-25 08:18:47