gpt4 book ai didi

jsf - 在 OmniFaces o :validateMultiple validation, PrimeFaces p:inputText 值丢失后,INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL

转载 作者:行者123 更新时间:2023-12-04 18:43:26 24 4
gpt4 key购买 nike

在 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 View :

<?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">保持值(value)观。

我认为<p:inputText>不应该失去值(value)还是我做错了什么?


我正在使用,

  • PrimeFaces 5.1.14(或 5.2.RC2)
  • OmniFaces 1.8.1
  • Mojarra 2.2.10
  • Tomcat 8
  • Java 8

最佳答案

似乎 PrimeFaces 渲染器在提交的值为 null 且输入无效时有一种快捷方式,同时启用“将空字符串解释为 null”,这可能是为了规避一些模糊的错误。你可以在 ComponentUtils#getValueToRender() 中看到它下面第一个 if 语句(行号匹配 PF 5.1):

68  if(config.isInterpretEmptyStringAsNull() && submittedValue == null && context.isValidationFailed() && !input.isValid()) {
69 return null;
70 }
71 else if(submittedValue != null) {
72 return submittedValue.toString();
73 }

该部分没有考虑组件是否已经设置了本地值。可以通过 UIInput#isLocalValueSet() 检查.

如果您按如下方式重写它,那么它应该会按预期工作:

68  if(config.isInterpretEmptyStringAsNull() && submittedValue == null && !input.isLocalValueSet() && context.isValidationFailed() && !input.isValid()) {
69 return null;
70 }
71 else if(submittedValue != null) {
72 return submittedValue.toString();
73 }

我可以将其报告给 PF 人员,但由于您似乎拥有 Pro/Elite 访问权限,您最好这样做。

关于jsf - 在 OmniFaces o :validateMultiple validation, PrimeFaces p:inputText 值丢失后,INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29350816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com