1

ユーザーが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)

これは一番下の例外トレースです。

質問: ボタンがクリックされたときに入力フィールドに入力された値をボタンのアクションに渡すにはどうすればよいですか? これにより、ブラウザーはバッキングに頼らずに、入力の値をパラメーターとして渡して目的のページに移動します。豆。

サーバーと通信する必要はありません。ページを転送するだけです。

JSF と連携して jQuery またはプレーンな JavaScript を使用するソリューションも受け入れられます。

mojarra、primefaces 3.3.1を使用

4

2 に答える 2

2

BalusC<f:param>のこの記事で説明されていますhttp://balusc.blogspot.in/2011/09/communication-in-jsf-20.html#ProcessingGETRequestParameters

于 2013-02-26T16:17:57.587 に答える
0

マウスを殺すのにバズーカは必要ありません。答えはとても簡単です。

javascript関数をボタンのにバインドしonclick、その関数で、入力フィールドの値をそのIDで取得してから、パラメーターを使用してURLをアセンブルし、javascript関数内から移動します。

JSFコード(myFormIDがフォーム内にあると想定):

<p:inputText id="myInput" style="width:75px;" />
<p:commandButton id="myButton" value="Ir" onclick="navega();" title="Ir" ajax="false" proces="@none" />

別のファイルまたは後でxhtmlドキュメントで宣言されたJavascriptスクリプト:

function navega() {
     var submittedInputValue = $('#myForm\\:myInput').val();
     window.location.href = "/site/mypage.xhtml?param1=whatever&amp;id=" + submittedInputValue ;
                }

jQueryで\\をエスケープするために使用し、xhtmlではなくを使用してエンティティとして扱われないようにするための先頭ID(myForm:myInput)に注意してください。:&amp;&

Note: probably not all of those commandButton attributes are required, feel free to edit this answer and remove the useless ones.

EDIT: removed the submit and changed process to @none on the command button.

于 2013-02-26T17:23:45.247 に答える