【发布时间】:2013-02-12 04:18:57
【问题描述】:
我需要制作一个小表单,用户在 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)
这是最底层的异常跟踪。
问题:当单击按钮时,如何将输入字段中键入的值传递给按钮的操作,以便浏览器导航到所需的页面,将输入中的值作为参数传递,而无需求助到一个backing bean。
我不需要与服务器通信,只需转发页面即可。
任何使用 jQuery 或纯 javascript 与 JSF 结合的解决方案也是可以接受的。
使用 mojarra,primefaces 3.3.1
【问题讨论】:
-
你做错了。 action 需要一个 java 方法作为 EL。例如:#{bean.someMethod}。其中“bean”是 JSF ManagedBean。要传递值,请使用#{bean.someMethod(someValue)}。在此处查看更多信息:balusc.blogspot.in/2011/09/communication-in-jsf-20.html
-
<p:commandButton>的操作可以有一个字符串而不是一个 Java 方法。当您单击按钮时,它会将您带到一个页面。我不想要方法表达式。 -
具体功能需求不清楚。您要执行 GET 表单提交还是要执行 POST 表单提交然后重定向到所需的 GET URL?
-
另外,使用支持 bean 的解决方案,将输入绑定到 POJO 属性和
faces-redirect=true是已知的,但我需要在不使用支持 bean 的情况下这样做。 JSF、jQuery都可以,但是不能创建或修改Java类。 -
@BalusC:用例:表单具有输入字段和按钮。用户在输入中输入值。用户点击按钮。用户导航到另一个页面,将输入中的值作为参数传递给新页面。在 JSF 中实现此结果而不使用 Java 类的任何策略都是可以接受的。
标签: jsf jsf-2 primefaces el