2011-11-08 48 views
3

我有一個非常複雜的JSF頁面讀取動態輸入元素(我們使用JSF2用的facelet),其中我要「插電式」純HTML窗體節(它代表了一個文檔所見即所得模板將在稍後創建爲PDF)。 非常簡化的頁面看起來像JSF的託管bean

<h:form id="formEditDoc"> 
    <p:commandButton styleClass="commandButton" value="Save" 
     actionListener="#{myBean.myAction}" update="masterForm:msg"> 
    </p:commandButton> 

    <!-- some jsf controls here --> 
    .... 

    <!-- this is my dynamic section --> 
    <input id="ft2" type="text" value="foo"/> 
</h:form> 

在Managed Bean爲myBean(請求範圍)我有動作監聽中,我試圖讓「foo」的字符串,以這樣的方式

String text1 = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("ft2"); 

但我無法獲得價值。 Text1始終爲空。我甚至試圖設置AJAX =假到命令,但沒有任何改變。 什麼我做錯了任何想法?

回答

4

這是輸入的name=value對發送請求參數name=value而不是id=value。您需要改爲設置name屬性。

<input id="ft2" name="ft2" type="text" value="foo"/> 

無關的具體問題,我建議使用@ManagedProperty,而不是設定值:

@ManagedProperty("#{param.ft2}") 
private String ft2; 
+0

首先第一件事情:謝謝你的解決方案。對於一般的方法,我的問題更復雜。我不能使用@ManagedProperty(「#{} param.ft2」)私人字符串平方英尺;技術,因爲我不知道我的網頁上有多少輸入字段:它們取決於用戶可以創建自己的某個模板。出於同樣的原因,我不能使用inputHidden:首先,我希望輸入框可以被用戶看到並且可以編輯,其次我不知道他們會需要多少人。 – themarcuz

+1

爲這些輸入提供所有**相同的**名稱,並在'String []'屬性上使用'#{paramValues.ft}'。它們將按照出現在HTML DOM中的順序顯示。對不起inputhidden,這是一個愚蠢的想法,我忽略了你沒有使用'型=「隱藏」'。 – BalusC