从JSF 1.2页面访问bean方法 - 钩子生命周期?黑客入门?

时间:2010-12-13 18:18:30

标签: jsf methods arguments

我想做类似的事情(在jsf 1.2中):

<html> 
...
#{myObject.foreignKey(parentObject.primaryKey)}

<h:inputText value="#{myObject.myProperty}"/>
</html>

或者换句话说:从网页上我想在到达该页面时在对象中设置一个值。

虽然这在JSF 2.0中很容易,但在JSF 1.2中似乎有点不可能 这有什么黑客/解决方法吗? 定义一个函数,它将对象和字符串/整数作为参数并处理返回的对象? 覆盖inputText(以及所有其他输入字段)并访问所有类型的框架相关类似乎很脏

1 个答案:

答案 0 :(得分:1)

这不是特定于JSF实现,而是特定于EL实现。在EL 2.2 from Java EE 6之前的标准EL实现中,您无法传递类似的方法参数。除了升级到支持EL 2.2(Tomcat 7,Glassfish 3,JBoss 6等)的servletcontainer之外,您还可以自己替换EL实现。实现特定要求的常用方法是JBoss-EL。下载jboss-el.jar /WEB-INF/lib并将其添加到web.xml,假设您使用Mojarra作为JSF实现:

<context-param>     
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>   
</context-param>

另一种方法是使用JSTL <c:set>

<html xmlns="java.sun.com/jsp/jstl/core">
...
<c:set target="#{myObject}" scope="request" property="foreignKey" value="#{parentObject.primaryKey}" />

请注意,xmlns:c="java.sun.com/jstl/core"上的Facelets内置JSTL库也包含c:set,但这在功能上受到很大限制。 xmlns:c="java.sun.com/jsp/jstl/core"需要一个完整的JSTL lib,它通常已经与一个成熟的servletcontainer一起发布。但是,在Apache Tomcat中,您必须自己下载并安装它。有关链接和更多详细信息,请参阅our JSTL wiki page