2014-04-17 66 views
0

空字符串下面的例子:JSF轉換器不要求在selectOneMenu用於

<h:selectOneMenu value="#{bean.value}"> 
    <f:selectItem itemValue="#{null}" itemDisabled="#{true}" noSelectOption="#{true}" itemLabel="choose one" /> 
    <f:selectItem itemValue="FEMALE" itemLabel="female" /> 
    <f:selectItem itemValue="MALE" itemLabel="male" /> 
    <f:converter converterId="myConverter" /> 
</h:selectOneMenu> 

初始加載bean的值是null所以請-選擇選項被選中。如果用戶不選擇,瀏覽器將不會提交一個值(所選選項被禁用),JSF會將該值設置爲空字符串。如果頁面再次呈現,則沒有相應的值,JSF將不會呈現selected屬性,大多數瀏覽器將預先選擇第一個非禁用值。壞。

我想我可以很容易地改變這與一個轉換器將空字符串轉換爲nullgetAsObject。但在這種情況下,轉換器不會被調用。

有人知道爲什麼嗎?

我知道我可以用javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 更改此行爲,但這會導致其他字段出現其他問題。

+0

我傾向於使用值「 - 」爲「無選擇」值。這是容易識別的服務器端,不可能導致衝突,它不是一個空字符串或空:) – Gimby

+0

謝謝,但不會幫助我:(值' - '也將被替換爲空字符串。問題是select-element被禁用,所以瀏覽器不會提交一些東西,但JSF會改變它的值。我會更新我的問題。 – lefloh

+0

讓字段不是必須的嗎?設置對我來說似乎是一個強制選擇我必須承認我沒有關於禁用項目的經驗,我只是讓值提交併處理不良選擇服務器端 – Gimby

回答

0

我解決我的問題通過手動設置選擇的屬性:

<f:selectItem itemValue="#{null}" itemDisabled="#{true}" noSelectOption="#{true}" itemLabel="choose one" /> 
    <f:passThroughAttributes value="#{bean.attributes}" /> 
</f:selectItem> 

public Map<String, String> getAttributes() { 
    Map<String, String> attributes = new HashMap<>(); 
     if (value == null || "".equals(value)) { 
      attributes.put("selected", "selected"); 
     } 
    } 
    return attributes; 
}