Jsf Primefaces存在非ajax请求的就地问题
我正在使用primefaces inplace编辑器。(3.2、3.3、3.4RC1和3.4快照) 当表单是通过非ajax请求提交的,并且表单中的其他一些必填字段没有填写时,页面应该重新加载并显示所需的消息。但实际发生的是:随着页面重新加载和requiredMessage,inplace编辑器已经显示出来。如何解决这个问题 重现问题的示例代码Jsf Primefaces存在非ajax请求的就地问题,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,我正在使用primefaces inplace编辑器。(3.2、3.3、3.4RC1和3.4快照) 当表单是通过非ajax请求提交的,并且表单中的其他一些必填字段没有填写时,页面应该重新加载并显示所需的消息。但实际发生的是:随着页面重新加载和requiredMessage,inplace编辑器已经显示出来。如何解决这个问题 重现问题的示例代码 <h:form prependId="false"> <p:inplace editor="true" widgetVar="X
<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>
我敢打赌这是
中的一个bug。从InplaceRenderer#encodeMarkup()
方法:
boolean validationFailed = context.isValidationFailed();
String displayStyle = validationFailed ? "none" : "inline";
String contentStyle = validationFailed ? "inline" : "none";
它不会检查验证失败是否与“自己的”表单有关,因此无论提交的表单是什么,都会在验证失败时显示。除了编辑PrimeFaces源代码、创建自定义渲染器和/或发布错误报告之外,您实际上没有什么可以做的
您可以在widgetVar
上的JavaScript帮助下手动关闭inplace编辑器来解决此问题。它有一个关闭编辑器的cancel()
函数
<p:commandButton binding="#{foo}" value="Submit" action="#{smsAlertBean.dummyAction}" ajax="false" />
<h:outputScript rendered="#{param.containsKey(foo.clientId)}">X.cancel();</h:outputScript>
X.取消();
(因此,当实际按下命令按钮时,将呈现此脚本)
然而,这对速度较慢的机器/浏览器来说只是一个丑陋的影响。就地编辑器闪烁。考虑到PrimeFoes的成员,
ajax=“false”
doprocess=“@form”update=“@form”
噢,当你提交表单时,它会在没有用户交互的情况下显示。已经报告为bug(请投票):而不是使用cancel()
函数(这会导致ajax更新)您可以调用hide()
@siebz0r:Hmm,我一开始没有注意到ajax请求,但我观察到cancel()
立即隐藏,而hide()
非常明显地淡出。这可能可以通过提供不同且更好的效果
和效果速度
属性进行调整。cancel()
调用更新以确保重置任何输入元素<代码>隐藏()但是“只是隐藏”。