我们h:inputText在一个绑定到Integer属性的JSF页面中使用a (因此可以接受null).当没有写入的值时h:inputText,表单提交的是0代替null.我们正在使用Trinidad 1.2.2和Tomcat 6.0.20(我们也尝试过Tomcat 6.0.14,因为我们读到这可能发生在某些Tomcat版本上).
这是怎么造成的,我该如何解决?
如何@Pattern在非强制表单字段上使用约束?
@Pattern(regexp="...")
private String something;
Run Code Online (Sandbox Code Playgroud)
一旦我提交表单,我就会得到预期的验证错误,但是用户可能会将该字段留空,因为这不是必填字段.
PS:我可以编写自己的约束注释.但是,我只想问一种更简单的方法来组合注释或添加注释属性.JSR303实现是hibernate-validator.
我知道在JSF2中有很多关于将空字符串转换为null的帖子.通常的处方是将以下内容添加到web.xml中.
<context-param>
<description>Does not appear to work</description>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
这根本不起作用 - 根本没有.然后我创建了一个自定义字符串转换器来测试它是否可行.我明确地将它作为转换器添加到我的inputText中(否则它在空白时不会触发).
当INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL设置为true时,转换器接收null,输入文本的setter仍然接收"".
当INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL设置为false(或注释掉)时,转换器接收""并且输入文本的setter接收""(即使在转换器返回null之后).
@FacesConverter(forClass=java.lang.String.class, value="emptyStringToNull")
public class StringConverter implements Converter, Serializable {
private static final long serialVersionUID = -1121162636180944948L;
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value == null || value.trim().isEmpty()) {
return null;
}
return value;
}
public String getAsString(FacesContext context, UIComponent component, Object object) {
if (object == null)
return null;
return object.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
我试过(无济于事)在getAsObject中显式设置组件提交的值:
if (component instanceof EditableValueHolder)
((EditableValueHolder) component).setSubmittedValue(null);
Run Code Online (Sandbox Code Playgroud)
我正在使用JBoss6(6.1的快照)和JSF …
我试图在一个字段进行多次验证
@NotBlank(message = "{name.required}")
@Max(value = 25, message = "{long.value}")
public String name;
Run Code Online (Sandbox Code Playgroud)
JSF:
<h:inputText id="name" value="#{person.name}" size="20">
</h:inputText>
<h:message for="name" style="color:red" />
Run Code Online (Sandbox Code Playgroud)
但是当我将该字段留空时,它会显示两条错误消息.
任何想法如何处理这两种情况,独立验证空和最大长度.
我有一个输入位置应该得到一个数字.我希望它显示为空.但是,当我运行我的程序时,我默认为0或0.00.我怎么能把它弄空?
在我的应用程序中,我使用 JSF 和 Java Web 服务。当我的任何 Web 服务函数返回一个null值时,它始终表示为“null”字符串。因此,我无法使用 EL 表达式来#{empty object}测试null值或空字符串。
我想问是否有一种方法可以进行配置,使 Java Web Services 将返回null值作为空字符串,或者 JSF/EL 可以将“null”字符串理解为null值。