我有一个命令按钮,我想用它来导航到另一个jsf facelet,但我得到一个不是有效的方法表达式:
<h:commandButton value="Save Edits" action="editOrDeletePage.xhtml?editing=true;#{product.id};name=#{product.productName};description=#{product.description};quantity=#{product.quantity}"/>
如果我只有
,我可以让它工作action="editOrDeletePage.xhtml?editing=true"
我想当我有多个属性正在传递时,我并没有正确划分它们。有什么想法吗?
答案 0 :(得分:8)
当action
属性包含EL表达式时,它被解释为方法表达式。因此,当您使用action="#{bean.someMethod}"
时,它才真正有效。但是,您的尝试不代表有效的方法表达式,而是表示action
属性不接受的值表达式。
如果您打算将其他请求/视图参数附加到表单提交,那么您应该使用<f:param>
。
<h:commandButton value="Save Edits" action="editOrDeletePage.xhtml">
<f:param name="editing" value="true" />
<f:param name="id" value="#{product.id}" />
<f:param name="name" value="#{product.productName}" />
<f:param name="description" value="#{product.description}" />
<f:param name="quantity" value="#{product.quantity}" />
</h:commandButton>
请注意,这些参数不会在请求URL中结束(正如您在浏览器地址栏中看到的那样),并且您的理论方法也不会这样做,JSF命令按钮即生成HTML {{1提交到父HTML <input type="submit">
的{{1}}属性中指定的相同URL的元素。
另请注意,在表单提交期间,但在显示表单期间,不会评估这些参数。如果你打算按照这种方式传递提交的值,那么你基本上做错了。您可能希望将它们指定为视图参数,以便可以使用action
作为操作。
毕竟,很难为您提出正确的解决方案,因为您根本没有详细说明具体的功能要求。
答案 1 :(得分:0)
如果您使用的是JSF2
,则可以h:button
使用此
<h:button value="press here" outcome="editOrDeletePage">
<f:param name="productId" value="#{product.id}" />
</h:button>