2013-02-26 38 views
0

我需要製作一個小型表單,用戶在inputField中鍵入一個數字,然後單擊一個按鈕,然後發送到一個頁面,使用該數字作爲參數到頁面。CommandButton動作:使用inputText的值作爲動態URL中的參數

到目前爲止,我得到這個:

<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的操作中,以便瀏覽器導航到所需的頁面,並將輸入中的值作爲參數傳遞,而無需訴諸支持豆。

我不需要與服務器通信,只是轉發頁面。

任何使用jQuery或純JS與JSF串聯的解決方案也可以接受。

使用鑽嘴魚科,primefaces 3.3.1

+0

你做錯了。行動期望一個Java方法作爲EL。例如:#{bean.someMethod}。 'bean'是JSF ManagedBean的地方。要傳遞值使用#{bean.someMethod(someValue)}。在這裏查看更多:http://balusc.blogspot.in/2011/09/communication-in-jsf-20.html – 757071 2013-02-26 16:16:13

+0

''''的動作可以有一個字符串而不是Java方法。它會在您點擊按鈕時將您發送到頁面。我不想要一個方法表達式。 – Mindwin 2013-02-26 16:51:05

+0

具體功能需求尚不清楚。你想要執行GET表單提交還是要執行POST表單提交,然後重定向到所需的GET URL? – BalusC 2013-02-26 17:01:57

回答

0

解釋我並不需要一個火箭筒殺死一隻小白鼠。答案很簡單。

將一個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&amp;id=" + submittedInputValue ; 
       } 

注意prepend id(myForm:myInput),使用\\來跳過jQuery中的:,並且在xhtml中使用&amp;而不是&,因此它不作爲實體處理。

注意:可能不是所有的那些commandButton屬性都是必需的,隨意編輯這個答案並刪除無用的。

編輯:刪除提交和更改過程到@none在命令按鈕上。

2
+0

該部分解釋瞭如何從正在生成視圖的請求中使用GET參數進入該視圖。我希望得到相反的結果,獲得頁面元素的價值並將其轉化爲新的請求。 – Mindwin 2013-02-26 17:01:37

+0

」服務於完全不同的目的。 OP本質上需要GET表單。 – BalusC 2013-02-26 17:38:48

+0

甚至不是GET表單。在這種情況下,不需要與服務器通信,只需執行操作並將用戶轉發到下一頁。無論如何,當用戶從前一頁登陸時,將與服務器進行通信,但對於導航,只需簡單的javascript或jQuery就足夠了 – Mindwin 2013-08-28 19:24:16