我需要制作一个小表单,用户在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)
这是最底层的异常跟踪。
问题:当点击按钮时,我如何将输入字段中键入的值传递到按钮的操作中,这样浏览器就可以导航到所需的页面,将输入中的值作为参数传递,而不需要使用backingbean。
我不需要与服务器通信,只需转发页面即可。
任何将jQuery或纯javascript与JSF结合使用的解决方案都是可以接受的。
使用mojarra,素数面3.3.1
使用<f:param>
本文从BalusC中对此进行了解释http://balusc.blogspot.in/2011/09/communication-in-jsf-20.html#ProcessingGETRequestParameters
我不需要火箭筒来杀死一只老鼠。答案很简单。
将一个javascript函数绑定到按钮的onclick
,在该函数中,根据输入字段的id检索输入字段的值,然后将URL与参数组合在一起,并在javascript函数中导航离开。
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 ;
}
注意前缀id(myForm:myInput(,在jQuery中使用\
来转义:
,在xhtml中使用&
而不是&
,这样它就不会被视为一个实体。
注意:可能不是所有的commandButton属性都是必需的,请随意编辑这个答案并删除无用的属性。
EDIT:删除了提交,并在命令按钮上将流程更改为@none
。