2017-08-17 48 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表达式中更好。它的确代码非常繁琐。

相关问题