Primefaces inplace问题与非Ajax请求

时间:2012-08-29 09:44:33

标签: jsf jsf-2 primefaces

我正在使用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>

1 个答案:

答案 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应首先检查验证失败是否与自己的形式有关。