我有立即=「真」有點麻煩(JSF 1.2)。我的形式是約了車禍:用戶填寫一些ubication信息,然後根據自己意願(樹木,圍牆,其他汽車等)立即=「true」和所需的字段問題
支持bean
private String location;
private List<T> items;
private HtmlDataTable itemsUI;
public void remove(ActionEvent e) {
String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
items.remove(Integer.parseInt(id));
}
public void add(ActionEvent e) throws InstantiationException, IllegalAccessException {
items.add(element.newInstance());
}
他可以添加許多受影響的項目
JSPX
<h:inputText
required="true"
value="#{ACC01.location}"/>
<h:dataTable
binding="#{ACC01.itemsUI }"
value="#{ACC01.items}"
var="item">
<h:column>
<h:selectOneMenu
value="#{item.id}>
<f:selectItems
value="#{ACC01.possibleElements}" />
</h:selectOneMenu>
<h:commandLink
actionListener="#{ACC01.remove }"
value="Remove" >
<f:param
name="id"
value="#{ACC01.itemsUI.rowIndex }"/>
</h:commandLink>
</h:column>
</h:dataTable>
<h:commandLink
actionListener="#{ACC01.add}"
value="Add" />
問題
如果設置即時=「真」在數據表中,當用戶添加新元素的其他元素返回到它們的缺省值受影響的元素(例如如果你有{'tree','car','fence'},他們會變成{'default','default','default',new element})
如果我不立即使用,元素保持正確的值,但是用戶在添加或刪除受影響的元素之前必須填寫「位置」字段。
我想要的是能夠保持受影響的元素的值,並允許用戶添加或刪除它們而不必先填充「位置」字段。
解決方法
閱讀很多帖子這個話題後,似乎走的唯一辦法是避免自動驗證,並在用戶提交表單手工做出來。
檢查空所需的字段,以及附加編程錯誤消息的FacesContext。我真的不想這樣做,因爲我認爲這很醜陋。
能否請您提出更好的方法來達到我需要的行爲?
在此先感謝
嘿感謝您的提示,聽起來像少的工作要做,現在仍然是一個實用的解決方案。 –
其實,我並沒有改變什麼,代碼段工作正常,因爲它是。再次感謝Kartik。 –