我需要创建一个小表单,用户在inputField中键入一个数字,然后单击一个按钮,然后发送到页面,使用该数字作为页面的参数。
到目前为止,我进入了这个:
<p:inputText id="myText" style="width:75px;" />
<p:commandButton id="myButton" value="Ir"
action="/site/page.xhtml?id=${param['form:myButton']}"
title="Ir" ajax="false" proces="@this,myText" />
尝试使用${param['form:myButton']}
和#{param['form:myButton']}
,错误是相同的。
问题是,JSF认为它是一个方法表达式......
GRAVE: Servlet.service() for servlet [Faces Servlet] in context with path [/intranet] threw exception [/myPage action="/site/page.xhtml?id=${param['form:myButton']}".xhtml @95,41 action="/site/page.xhtml?id=${param['form:myButton']}" Not a Valid Method Expression: action="/site/page.xhtml?id=${param['form:myButton']}" with root cause
javax.el.ELException: Not a Valid Method Expression: action="/site/page.xhtml?id=${param['form:myButton']}"
at org.apache.el.lang.ExpressionBuilder.createMethodExpression(ExpressionBuilder.java:236)
at org.apache.el.ExpressionFactoryImpl.createMethodExpression(ExpressionFactoryImpl.java:55)
at org.jboss.weld.util.el.ForwardingExpressionFactory.createMethodExpression(ForwardingExpressionFactory.java:43)
at org.jboss.weld.el.WeldExpressionFactory.createMethodExpression(WeldExpressionFactory.java:64)
at com.sun.faces.facelets.tag.TagAttributeImpl.getMethodExpression(TagAttributeImpl.java:222)
at com.sun.faces.facelets.tag.jsf.ActionSourceRule$ActionMapper2.applyMetadata(ActionSourceRule.java:104)
at com.sun.faces.facelets.tag.MetadataImpl.applyMetadata(MetadataImpl.java:81)
at javax.faces.view.facelets.MetaTagHandler.setAttributes(MetaTagHandler.java:129)
at javax.faces.view.facelets.DelegatingMetaTagHandler.setAttributes(DelegatingMetaTagHandler.java:102)
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.doNewComponentActions(ComponentTagHandlerDelegateImpl.java:402)
这是最底层的异常追踪。
问题:如何在单击按钮时将输入字段中输入的值传递到Button的操作中,以便浏览器导航到所需的页面,将输入中的值作为参数传递,而无需求助到一个支持bean。
我不需要与服务器通信,只需转发页面即可。
任何使用jQuery或普通javascript与JSF协同的解决方案也是可以接受的。
使用mojarra,primefaces 3.3.1
答案 0 :(得分:2)
使用<f:param>
来自BalusC http://balusc.blogspot.in/2011/09/communication-in-jsf-20.html#ProcessingGETRequestParameters
答案 1 :(得分:0)
我不需要火箭筒杀死鼠标。答案非常简单。
将javascript函数绑定到按钮的onclick
,并在该函数中,通过其id检索输入字段的值,然后使用参数汇编URL并从javascript函数中导航。< / p>
JSF代码(假设它们位于myForm
作为其id的表单中:
<p:inputText id="myInput" style="width:75px;" />
<p:commandButton id="myButton" value="Ir" onclick="navega();" title="Ir" ajax="false" proces="@none" />
Javascript脚本,在单独的文件中声明或稍后在xhtml文档中声明:
function navega() {
var submittedInputValue = $('#myForm\\:myInput').val();
window.location.href = "/site/mypage.xhtml?param1=whatever&id=" + submittedInputValue ;
}
记下prepend id(myForm:myInput),使用\\
来逃避jQuery中的:
,并在xhtml中使用&
代替&
所以它不被视为一个实体。
注意:可能并非所有这些commandButton属性都是必需的,您可以随意编辑此答案并删除无用的答案。
编辑:在命令按钮上删除了提交和更改过程@none
。