CommandButton操作:使用inputText的值作为动态URL中的参数

时间:2013-02-26 16:07:07

标签: jsf jsf-2 primefaces el

我需要创建一个小表单,用户在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

2 个答案:

答案 0 :(得分:2)

答案 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&amp;id=" + submittedInputValue ;
                }

记下prepend id(myForm:myInput),使用\\来逃避jQuery中的:,并在xhtml中使用&amp;代替&所以它不被视为一个实体。

注意:可能并非所有这些commandButton属性都是必需的,您可以随意编辑此答案并删除无用的答案。

编辑:在命令按钮上删除了提交和更改过程@none