繁体   English   中英

以编程方式无效的输入清除JSF / PrimeFaces中的值

[英]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 &amp;&amp; !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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM