我想做类似的事情(在jsf 1.2中):
<html>
...
#{myObject.foreignKey(parentObject.primaryKey)}
<h:inputText value="#{myObject.myProperty}"/>
</html>
或者换句话说:从网页上我想在到达该页面时在对象中设置一个值。
虽然这在JSF 2.0中很容易,但在JSF 1.2中似乎有点不可能 这有什么黑客/解决方法吗? 定义一个函数,它将对象和字符串/整数作为参数并处理返回的对象? 覆盖inputText(以及所有其他输入字段)并访问所有类型的框架相关类似乎很脏
答案 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>
<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。