2011-09-05 17 views
1

我的形式如下:JSF無法設置動態ID輸入組件

enter image description here

當用戶點擊 「+添加」 一個新的距離輸入顯示出來:

enter image description here

用戶可以根據需要多次重複此操作,但必須填寫所有距離,並且必須爲丟失的數據提供單個消息:

enter image description here

所以我試圖建立距離輸入的動態ID。但是,當我嘗試傳遞動態值時,一切都失敗了。到現在爲止我已經嘗試過兩種不同的技術:使用

  • 結合HtmlDataTable的rowIndex位置< - 它總是顯示-1
  • 設置id作爲距離類<的屬性 - 醜陋異常

這裏是我的代碼:

支持bean:

private List<Distance> distances; 
private HtmlDataTable distancesUI; 

public void addDistance(ActionEvent e) { 
    distances.add(new Distance()); 
} 

JSPX:

<h:dataTable 
binding="#{Bean.distancesUI}" 
value="#{Bean.distances}" 
var="distance"> 
    <h:column> 
     <h:inputText 
     id ="distance_#{Bean.distancesUI.rowIndex}" // <- always renders "distance_-1" 
     value="#{distance.value}" /> 
    </h:column> 
</h:dataTable> 

我需要能夠展現個人 「需要」 的消息。有任何想法嗎?

在此先感謝

回答

3

我需要能夠展現個人「需要」的消息。有任何想法嗎?

爲此,您不需要撥動ID。 JSF會爲你做。只要做到

<h:dataTable id="table" value="#{bean.distances}" var="distance"> 
    <h:column> 
     <h:inputText id="distance" value="#{distance.value}" required="true" /> 
     <h:message for="distance" /> 
    </h:column> 
</h:dataTable> 

這將在生成的HTML落得像如下:

<table id="form:table"> 
    <tr><td><input id="form:table:0:distance" /></td></tr> 
    <tr><td><input id="form:table:1:distance" /></td></tr> 
    <tr><td><input id="form:table:2:distance" /></td></tr> 
    ... 
</table> 

右擊在瀏覽器頁面,並選擇查看源看到它自己。

任何驗證錯誤只會顯示在與輸入相同的行中。

+0

它的工作原理。感謝您的及時答覆。 –

+0

不客氣。 – BalusC