2017-08-17 90 views
5

我們有幾個具有空字段的域對象。 我們已經讀過hibernate需要'raw'對象來正確映射它,所以我們的getters返回optionals。 我們的域對象是這樣的:如何處理JSPX中的選項?

public class User { 

    private String firstName; 

    private User boss; 

    public Optional<String> getFirstName(){ 
     .... 
    } 

    public Optional<User> getBoss() { 
     ... 
    } 
} 

但是現在我們有了解決/結合在.jspx文件這些領域的問題。 (無論是顯示還是在表單輸入字段中。) 對於基本類型和字符串,我們可以通過定義一個自定義的OptionalToStringConverter來繞過這個。

還有一個問題是對其他域對象的可空引用。

我們考慮了幾種方案,但都沒有真正滿意與其中任何一個:

  • 定義自定義轉換器,用於所有的域對象和類型(會導致許多轉換似乎並沒有爲輸入字段工作)
  • 在每個域對象上定義可選和非可選的getter(1.重複代碼,2.我們希望指示可空的字段cleary,3.不覺得乾淨以訪問可選和不可選字段)
  • 定義一個返回'raw'值或null的'show command'(重複代碼)
  • 定義自定義Tagx傳送,處理自選(時域對象變爲不可選的,我們將不得不改變Tagx廣告)

我們想知道,如果在JSPX解決自選一個非常乾淨的方式。

回答

0

在形式綁定方面,Spring很好地處理了這個問題:它會將第一個值映射到Optional.empty(),第二個和第三個映射到合適的Optional<Boolean>

<form:select path="anOptionalBoolean"> 
    <form:option value="" label="Not Specified"/> 
    <form:option value="true" label="Yes"/> 
    <form:option value="false" label="No"/> 
</form:select> 

在顯示值而言,我沒有發現任何東西比只使用.get.present等EL表達式中更好。它的確代碼非常繁瑣。

相關問題