2

我正在使用 primefaces 就地编辑器。(尝试过 primefaces 3.2、3.3、3.4RC1 和 3.4 快照)

当通过非 ajax 请求提交表单时,表单中的某些其他必填字段未填写,则页面应重新加载并显示所需消息。但实际发生的是:与 page-reload 和 requiredMessage 一起,就地编辑器已经显示出来了。如何解决这个问题呢?

重现问题的示例代码

<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>
4

1 回答 1

3

我敢打赌这是<p:inplace>. 从InplaceRenderer#encodeMarkup()方法:

boolean validationFailed = context.isValidationFailed();
String displayStyle = validationFailed ? "none" : "inline";
String contentStyle = validationFailed ? "inline" : "none";

它不检查验证失败是否与“自己的”表单有关,因此无论提交的表单如何,都将始终显示在验证失败上。除了编辑 PrimeFaces 源代码、创建自定义渲染器和/或发布错误报告之外,您没有什么可以做的。

您可以通过在widgetVar. 它具有cancel()关闭编辑器的功能。

<p:commandButton binding="#{foo}" value="Submit" action="#{smsAlertBean.dummyAction}" ajax="false" />
<h:outputScript rendered="#{param.containsKey(foo.clientId)}">X.cancel();</h:outputScript>

(因此,此脚本在实际按下命令按钮时呈现)

然而,这对慢速机器/浏览器只有一个丑陋的影响。就地编辑器闪烁。考虑将其作为错误报告给 PrimeFaces 人员,InplaceRenderer应首先检查验证失败是否与自己的表单有关。

于 2012-08-29T11:50:30.957 回答