我正在使用primefaces inplace编辑器。 (尝试过primefaces 3.2,3.3,3.4RC1和3.4快照)
当通过非ajax请求提交表单时,表单中的某些其他必填字段未填写,则页面应重新加载并显示所需的消息。但实际发生的情况是:除了page-reload和requiredMessage之外,还会显示inplace编辑器。如何解决这个问题?
重现问题的示例代码
<h:form prependId="false">
<p:inplace editor="true" widgetVar="X">
<p:inputTextarea value="#{smsAlertBean.alertText}" />
</p:inplace>
</h:form>
<h:form prependId="false">
<p:selectOneMenu required="true" requiredMessage="Please select">
<!-- your values -->
</p:selectOneMenu>
<p:commandButton value="Submit" action="#{smsAlertBean.dummyAction}" ajax="false" />
</h:form>
答案 0 :(得分:3)
我敢打赌这是<p:inplace>
中的错误。来自InplaceRenderer#encodeMarkup()
方法:
boolean validationFailed = context.isValidationFailed();
String displayStyle = validationFailed ? "none" : "inline";
String contentStyle = validationFailed ? "inline" : "none";
它不会检查验证失败是否涉及&#34;拥有&#34;无论提交的表单如何,表单都将始终显示验证失败。除了编辑PrimeFaces源代码,创建自定义渲染器和/或发布错误报告之外,您还可以做很多事情。
您可以通过widgetVar
上的JavaScript手动关闭就地编辑器来解决此问题。它有一个cancel()
函数可以关闭编辑器。
<p:commandButton binding="#{foo}" value="Submit" action="#{smsAlertBean.dummyAction}" ajax="false" />
<h:outputScript rendered="#{param.containsKey(foo.clientId)}">X.cancel();</h:outputScript>
(这个脚本因此在实际按下命令按钮时呈现)
然而,这对慢速机器/浏览器只有一个难看的效果。 inplace编辑器闪烁。考虑reporting it as a bug给PrimeFaces的人,InplaceRenderer
应首先检查验证失败是否与自己的形式有关。