2012-08-28 44 views
1

我有rich:popupPanel,其中包含t:dataList下的一列t:dataList。這個dataList有h:commandLink,裏面有f:param。對於richfaces 3.3,它工作正常,但在遷移到richfaces 4後,它停止工作。提到我使用rich:modalPanel代替rich:popupPanel的事實。我經歷了不少環節去。params沒有傳遞給支持bean:h:commandLink下rich:popupParameter和t:dataList

https://community.jboss.org/thread/202583

commandButton/commandLink/ajax action/listener method not invoked or input value not updated

,但沒有幫助:(我缺少的東西目前,綠豆屬於會話範圍,我使用getter獲取數據?模型作爲其不可能對我來說,把它放在構造

請讓我知道,如果有人有一個關於它的想法

PS:渲染HTML相當於看起來像這樣它請求參數VA。 rPath,但在後臺bean中,我們將其作爲null。

<a onclick="return myfaces.oam.submitForm('actionForm','actionForm:j_id0',null, [['varPath','/Link']]);" href="#" tabindex="-1" accesskey="">/Link</a> 
+0

您能否提供更詳細的代碼示例?包含彈出面板和dataList的頁面將非常有幫助 – tasel

+0

謝謝。通過將表單的encType更改爲「application/x-www-form-urlencoded」來解決問題。不知道它是如何工作的! –

回答

0

使用a4j:commandLink而不是h:commandLink正確傳遞參數來解決此問題。不需要僅用於參數的自定義過濾器。

+0

這是一種解決方法,而不是解決方案。您似乎完全不瞭解HTTP基本概念,也不瞭解HTTP請求中發生了什麼。正如我在答案中所解釋的那樣,您只需從「」中刪除'enctype'屬性即可解決您的問題。畢竟,你並不需要它。 – BalusC

+0

是的。我同意你的看法,這是一種解決方法,而不是解決方案。不幸的是,我無法刪除encType,因爲它需要多部分/表單數據,因爲圖像和文件上傳也在形式中。我知道在這種情況下創建自定義過濾器將是最好的選擇,但由於時間限制,我寧願只與解決方法一起生活。 –

0

CommandButton應放置在窗體標籤中。聽起來像你有嵌套的形式,或者你沒有形式。

+0

感謝您的回覆。我已經有圍繞整個內容的。 –

+0

正如我前面提到的,它在richfaces 3.3中運行良好:modalPanel,但是現在在將其遷移到rich:popupPanel後,它正在引發問題。 –

+0

,你只有一個這個組件的權利? – HRgiger

1

發現將「form/enc-form-urlencoded」中的表單的encType更改爲「multipart/form-data」可以解決此問題。雖然奇怪!不知道爲什麼它不適用於多部分加密。

如果有人知道這一點,還是想知道背後的解釋。

4

發現將form的encType從「multipart/form-data」更改爲「application/x-www-form-urlencoded」可以解決此問題。雖然奇怪!不知道爲什麼它不適用於多部分加密。

首先,它不是加密,而是編碼。差別非常大。 「加密」是一種以某種安全密鑰(密鑰,種子等)不可預測的方式改變價值的方法。 「編碼」是一種以數據傳輸機制可接受的方式改變數值的方法,和/或可由另一方識別/解析而不丟失任何數據的方式。這些值不會變得不可讀,或者是某種東西,它們只是被安排得有些具體而且不同。

回來到您的具體問題,multipart/formdata編碼通常只有當你需要能夠發送(上傳)的文件與表格一起使用,例如使用<input type="file">或RichFaces的<rich:fileUpload>組件。標準application/x-www-form-urlencoded形式的編碼,這基本上指定請求參數應當被髮送URL編碼以這種格式

Content-Type: application/x-www-form-urlencoded;charset=UTF-8 

name1=value1&name2=value2&name3=value3 

不適合於圍繞傳遞文件的內容。對於該multipart/form-data編碼應使用的基本上是這樣的:

Content-Type: multipart/form-data;boundary=SOME_BOUNDARY 

--SOME_BOUNDARY 
content-disposition: form-data;name="name1" 
content-type: text/plain;charset=UTF-8 

value1 
--SOME_BOUNDARY 
content-disposition: form-data;name="name2" 
content-type: text/plain;charset=UTF-8 

value2 
--SOME_BOUNDARY 
content-disposition: form-data;name="name3" 
content-type: text/plain;charset=UTF-8 

value3 
--SOME_BOUNDARY-- 

這種格式允許餘地請求主體封閉完整的文件內容。

在JSF 2.0/2中。1網絡應用程序,multipart/form-data請求通常由自定義Filter處理。在RichFaces的3的情況下,這通常是通過其在缺少的RichFaces 4.

注意,application/x-www-form-urlencoded已經是HTML形式的默認編碼類型的org.ajax4jsf.Filter處理。所以你不需要自己明確地指定它。只要省略enctype共有屬性:

<h:form> 

</h:form> 

,你應該準備就緒。

+0

非常感謝BalusC的詳細解釋。它確實有幫助。因爲,沒有擺脫使用編碼類型作爲「multipart/form-data」和richfaces4。我會嘗試搜索自定義過濾器的方式,這將填寫「org.ajax4jsf.Filter」。請讓我知道,如果你知道相同的好源。 –

+0

掌握了你的這篇文章:http://balusc.blogspot.in/2009/12/uploading-files-in-servlet-30.html。嘗試一下。 –

+0

只是添加沒有返回我的後臺bean中的參數值,我仍然將它們作爲null,這些不是文件參數,簡單的字符串參數。我是否需要爲此寫下整個自定義過濾器? –