2015-12-29 39 views
1

在我的JSF pagecode,我有類似下面的內容:H:selectOneRadio正在通過空字符,而不是空值的

<h:selectOneRadio value="#{pagecode.attending}" required="true" id="attendingRadio" binding="#{attendingRadio}"> 
    <f:selectItem itemValue="Y" itemLabel="Yes"/> 
    <f:selectItem itemValue="N" itemLabel="No"/> 
    <f:ajax event="click" render="attendingDetails" execute="attendingRadio"/> 
</h:selectOneRadio> 
<h:panelGroup id="attendingDetails"> 
    <h:panelGroup rendered="#{pagecode.showForm(attendingRadio.value)}"> 
     ... 
    </h:panelGroup> 
</h:panelGroup> 

在我pagecode支持bean,我有類似如下:

public class Pagecode { 
    protected Character attending; 

    public Character getAttending() { 
     return attending; 
    } 

    public void setAttending(Character attending) {  
     this.attending=attending; 
    } 

    public boolean showForm(Character c) { 
     if (c==null) { 
      return false; 
     } 
     (other stuff)... 
    } 

}

我期望的行爲是:

  1. 頁面加載。單選按鈕沒有被定義爲初始值,因此既不選擇也不選擇。但是,因爲required =「true」,所以如果用戶將它留空(並且它們爲空),用戶將得到驗證錯誤。
  2. 第一次加載頁面時,#{pagecode.showForm(attendingRadio.value)}被調用,我期望一個空對象將被傳遞,showForm將返回false。

做一些故障排除之後,我決定什麼是實際發生的是不是空對象的傳遞,即等價showForm(null),我不是得到的showForm(new Character('\u0000'))相當於;它會傳遞null的Unicode字符。

當我的h:selectOneRadio沒有選擇一個值時,有沒有辦法讓JSF傳遞Java空對象而不是空字符?我在WebSphere Portal 8.0上使用Apache MyFaces JSF 2.0。

作爲一個方面說明,我曾嘗試下面的添加到我的web.xml,而且不幸的是沒有幫助:

<context-param> 
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name> 
    <param-value>true</param-value> 
</context-param> 

回答

1

Character/char簡直就是你想要的價值壞數據類型代表。

改爲使用enum

public enum Choice { 
    Y, N; 
} 

private Choice attending; 

或者,可能更好,一個Boolean

private Boolean attending; 

<f:selectItem itemValue="true" itemLabel="Yes" /> 
<f:selectItem itemValue="false" itemLabel="No" /> 
+0

雖然我不同意,這是不幸的是沒有什麼事情我可以在這個項目很容易地改變 - 我所提供的代碼示例是一種簡化。實際參與的字符不在主頁面編碼類中,而在另一個屬於該子類屬性的對象內,不幸的是,該類是其他幾個項目使用的共享庫的一部分。我想改變它,但目前,我不能。 即使只是好奇的緣故,有沒有辦法讓h:selectOneRadio發送null而不是空字符?看起來像一個奇怪的實現。 – Chatoyancy

+1

責備EL,而不是JSF。您可以嘗試禁用COERCE_TO_ZERO。相關:http://balusc.omnifaces.org/2015/10/the-empty-string-madness.html – BalusC

+0

我剛剛用COERCE_TO_ZERO參數進行了測試,可以驗證它是否修復了它。行爲與該問題有關。謝謝! – Chatoyancy

相關問題