jsf - Primefaces 非 ajax 请求的就地问题

标签 jsf jsf-2 primefaces

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

当通过非ajax请求提交表单,并且表单中的其他一些必填字段未填写时,页面应该重新加载并显示所需的消息。但实际发生的情况是:与页面重新加载和 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>

最佳答案

我敢打赌这是 <p:inplace> 中的一个错误。来自 InplaceRenderer#encodeMarkup()方法:

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

它不会检查验证失败是否涉及“自己的”表单,因此无论提交的表单如何,都会始终显示验证失败。除了编辑 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>

(当实际按下命令按钮时,该脚本就会被渲染)

然而,这对慢速机器/浏览器只会产生丑陋的影响。就地编辑器闪烁。考虑reporting it as a bug PrimeFaces 的 friend 们,InplaceRenderer应首先检查验证失败是否涉及自己的表单。

关于jsf - Primefaces 非 ajax 请求的就地问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12175047/

相关文章:

java - 由 : java. lang.ArrayIndexOutOfBoundsException 引起:数组索引超出范围:0

jsf - 启用选择时,DataModel 必须实现 org.primefaces.model.SelectableDataModel。

jsf-2 - 如何使用 <f :loadBundle> tag inside <ui:composition> tag

jsf - 素面 p :commandButton with action not called

jsf - 验证器 =""<h :inputtext> in jsf causing exception 的属性

java - 如何在 JSF 2.0 中通过 AJAX 强制刷新数据表?

java - Primefaces 日历监听器不影响变量数据

jsf - Primefaces - 使用命令按钮更新数据表不起作用

java - JSF - 使用 Primefaces RowEditEvent 时如何获取旧值和新值?

java - jsf2 + <托管属性> <属性名称>