[英]Programmatically invalidated input cleares value in JSF / PrimeFaces
经过业务验证后,我想将UIInput设置为无效,以便它变为红色并告诉用户出了什么问题。 这是我的代码:
<p:outputLabel value="Label" for="input"/>
<p:inputText id="input" value="#{bean.selectedEntity.input}"/>
<p:commandButton value="#{msg['button.save']}"
icon="ui-icon-check"
action="#{bean.save()}"
update=":form, :growl"
oncomplete="if (args && !args.validationFailed) PF('detailDlg').hide();"
/>
// bean code
UIInput c = (UIInput) context.getViewRoot().findComponent("form:input");
c.setValid(false);
组件变为红色,但文本也被清除。 我可以通过一些解决方法使其工作:
Object value = c.getValue();
c.setValid(false);
c.setValue(value);
这是错误还是预期行为?
环境:PrimeFaces 6.1,JSF Mojarra 2.2.14,Java 8,Spring Boot 1.5.4
JSF已经满足了您的要求,您无需执行任何其他操作。 这里唯一的事情:使用标准验证方法。 如果您使用的是Primefaces,则当验证失败(并更新表单)时, ui-state-error
css类会自动添加到无效组件中。
如果要向用户显示自定义错误样式,请像这样覆盖:
.ui-inputfield.ui-state-error, .ui-selectonemenu.ui-state-error {
color: #dd6417 !important;
border: 1px solid #dd6417 !important;
}
现在,清除了该组件,因为在目标Bean中,您正在清除值,或者是请求Bean。
如果您需要执行业务验证(访问数据库并进行检查),更好的方法是使用JSF验证器创建隐藏字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.