【发布时间】:2015-03-30 15:57:59
【问题描述】:
在 OmniFaces <o:validateMultiple> 验证后,<p:inputText> 值会丢失。
我可以重现问题然后 web.xml 包含参数javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL:
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
如果我删除此参数 - 一切正常。
我有 JSF 视图:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:o="http://omnifaces.org/ui">
<h:form id="someForm">
<div>
<o:outputLabel for="bar1" value="Bar1" />
<p:inputText id="bar1" />
<p:message for="bar1"/>
</div>
<div>
<o:outputLabel for="bar2" value="Bar2" />
<p:inputText id="bar2" />
<p:message for="bar2"/>
</div>
<div>
<o:outputLabel for="bar3" value="Bar3" />
<h:inputText id="bar3" />
<h:message for="bar3"/>
</div>
<div>
<o:outputLabel for="bar4" value="Bar4" />
<h:inputText id="bar4" />
<h:message for="bar4"/>
</div>
<o:validateMultiple components="bar1 bar2 bar3 bar4"
validator="#{sameValueValidator}"
message="All values shold be the same"
showMessageFor="bar2 bar4"/>
<p:commandButton value="submit" process="@form" update="@form" />
</h:form>
</html>
和验证者:
public class SameValueValidator implements MultiFieldValidator {
@Override
public boolean validateValues(FacesContext context,
List<UIInput> components, List<Object> values) {
if (!values.isEmpty()) {
Object firstValue = values.get(0);
for (Object value : values) {
if (!Objects.equal(firstValue, value)) {
return false;
}
}
return true;
} else {
return false;
}
}
}
如果<o:validateMultiple> 验证失败(<p:inputText> 组件中的文本不相同)<p:inputText id="bar1"> 和<p:inputText id="bar2"> 变为空,但<h:inputText id="bar3"> 和<h:inputText id="bar4"> 保留值。
我认为<p:inputText> 不应该失去价值还是我做错了什么?
我正在使用,
- PrimeFaces 5.1.14(或 5.2.RC2)
- OmniFaces 1.8.1
- Mojarra 2.2.10
- 雄猫 8
- Java 8
【问题讨论】:
-
无法在 PF 5.1 + OF 1.8.1 + Mojarra 2.2.10 上重现它。我手头没有 PrimeFaces Elite 版本,但我也无法在 PF 5.2 RC2 上重现它。您可以使用 PF 5.1 或 5.2 RC2 重现它吗?如果是这样,您使用的是哪个 JSF impl/version?顺便说一句,OmniFaces 有一个
<o:validateEqual>,其目的就是验证多个组件是否相等。 -
是的,我可以使用 PF RC2、Mojarra 2.2.10 重现此问题。如果我从 web.xml 中删除: javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 参数 - 那么一切正常。
- 有同样的问题
标签: jsf primefaces omnifaces