我有一个<h:button>
的JSF 2页面。我想将两个<f:param>
传递给结果页面。
<f:param>
pOne的值来自页面bean
<f:param>
pTwo的值来自页面上的输入字段。
p两个值不存储在页面bean上 当用户点击同一页面内的图像地图时,pWwo的输入字段值由javascript设置。
问题是请求为param pTwo传递了null。
如果我将pTwo的值设置为静态值,值=&#34; 12345&#34;,则传递12345。
那么,为什么<f:param>
没有从源页面传递输入字段的值?
谢谢!
<input type="text" id="pTwo"/>
<h:button value="Go" outcome="destPage">
<f:param name="pOne" value=#{myBean.pOne}"/>
<f:param name="pTwo" value=#{pTwo}"/>
</h:button>
答案 0 :(得分:1)
您不能像这样在EL表达式中引用输入字段的值。即使您使用h:inputText
也不会。
此外,JSF计算按钮的链接,包括在服务器端呈现页面时的参数。因此,当用户看到页面并在输入字段中输入内容时,链接的URL已经修复且不会更改。
要以类似的方式解决此问题,您可以使用h:commandButton
代替h:button
,使用pTwo
提交包含h:inputText
值的表单并返回重定向新页面。对此的XHTML可能如下所示:
<h:form>
<h:inputText value="#{bean.pTwo}"/>
<h:commandButton action="#{bean.goToDest}" value="Go"/>
</h:form>
引用的操作方法可能如下所示:
public String goToDest() {
return "destPage?faces-redirect=true&pOne=" + pOne + "&pTwo=" + pTwo;
}
答案 1 :(得分:0)
尝试使用以下代码:
<h:commandButton action="#{bean.goToDest}" value="Go" >
<f:setPropertyActionListener target="#{yourDestinyManagedBean.pOne}" value="#{yourManagedBean.pOne}" />
<f:setPropertyActionListener target="#{youDestinyManagedBean.pTwo}" value="#{yourManagedBean.pTwo}" />
</h:commandButton>
您可以看到示例here。