我有一个带有ICEfaces组件的表单的Facelets页面。 empId
是一个long类型属性,如果bean中为null,则必须检查它。它在表单中被视为String
,我使用Long.valueof(empId).longValue();
将其转换为long类型,以便将其传递给DAO以检查DB列。
这是我们应该这样做的方式吗?或者还有其他方法吗?
答案 0 :(得分:1)
您希望使用Long
属性而不是String
属性来强制JSF / EL自动转换为Long
(它具有标准{{1的内置转换) },Number
和Boolean
类型。)
Enum
与
private Long empId;
您希望使用<h:inputText value="#{bean.empId}" />
属性来验证所需的输入。
required
可以使用<h:inputText value="#{bean.empId}" required="true" />
显示任何转换或验证错误消息。
<h:message>
您可以根据需要更改转化和所需消息,如下所示:
<h:inputText id="empId" value="#{bean.empId}" required="true" />
<h:message for="empId" />
这样你就不需要在bean的action方法中执行任何转换/验证,无论如何这对于它来说都是错误的。您应该使用JSF内置转换器或自定义<h:inputText id="empId" value="#{bean.empId}" required="true"
requiredMessage="Please enter employee ID."
converterMessage="Please enter digits only." />
<h:message for="empId" />
进行转换,使用JSF内置验证程序或自定义Converter
进行验证。支持bean属性应该已经保持正确的类型,并且支持bean操作方法不应该进行任何转换/验证。
我只是想知道调查列的DAO方法调用是否不能更好地由自定义Validator
处理,但这完全取决于具体的功能要求,这个问题在问题中是不清楚的。