2011-09-12 31 views
1

我有立即=「真」有點麻煩(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。我真的不想這樣做,因爲我認爲這很醜陋。

能否請您提出更好的方法來達到我需要的行爲?

在此先感謝

回答

3

一個以前開發商在我目前的工作提出了以下解決方案

JSPX

<h:inputText required="#{ACC01.saving}" value="#{ACC01.location}"/> 

輔助Bean

private UICommand btn; 

public boolean isSaving() 
{ 
    Map<?,?> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 
    return (params.containsKey(btn.getClientId(ctx))); 
} 

它可能不在你的情況下是完全正確的,但基本上他創造了ab從屏幕上的按鈕進入後臺bean中的'btn'變量。然後inputText只會在單擊btn時看到所需的位置文本。在你的情況下,它是一個命令鏈接,所以它可能有點不同,但我認爲它可能有幫助。

+0

嘿感謝您的提示,聽起來像少的工作要做,現在仍然是一個實用的解決方案。 –

+0

其實,我並沒有改變什麼,代碼段工作正常,因爲它是。再次感謝Kartik。 –