【问题标题】:PrimeFaces: conditional update on validationPrimeFaces:验证的条件更新
【发布时间】:2012-03-27 03:41:27
【问题描述】:

是否可以仅在验证成功时有条件地更新 JSF 组件?

我希望能够做类似的事情

<p:commandLink process="@form" listener="#{foo}" 
  update="something somethingElse"> 

只有在验证成功时才会更新“某物”。

有没有什么方法可以做到,或者 JSF 不支持这种方法?

我已经能够使用隐藏的 commandLinks 进行某种破解,但并不完全满意:

<p:commandLink process="@form" listener="#{foo}" 
  update="somethingElse" oncomplete="if (!args.validationFailed) $("#link").click();">
<p:commandLink style="display:none" id="link"
  update="something">

【问题讨论】:

  • 你为什么不使用 h:message(s) 呢?
  • 我试图做相反的事情:只有在验证成功时才更新。
  • oncomplete="if (!args.validationFailed) $("#link").click(); 此代码对我不起作用... :( 我的条件更新不起作用.. .
  • 我无法获得 h:messages 方法。请详细说明

标签: ajax validation jsf primefaces


【解决方案1】:

我认为message 的建议不一定能回答所提出的问题。假设他想要更新 message 以外的其他内容?

我自己没有尝试过,但另一种可行的方法是使用remotecommand

<p:remoteCommand id='good' update='goodUpdates'/>  
<p:remoteCommand id='bad' update='badUpdate'/>  
<p:commandButton oncomplete='if (your-test) good() else bad()'/>  

注意,这将需要再次往返服务器,因此性能是一个考虑因素。

【讨论】:

  • 正确。我已经更正了示例(“未完成”)
  • 非常感谢 :) 但 id 对我不起作用,我添加了属性名称 .... 现在工作正常...
【解决方案2】:

&lt;h:message&gt;(或 PrimeFaces 的对应物&lt;p:message&gt;)就是为此而设计的。或者,在你的情况下可能更好,&lt;h:messages&gt;(或&lt;p:messages&gt;)。

public void submit() {
    // ...

    if (fail) {
        FacesContext.getCurrentInstance().addMessage(null, 
            new FacesMessage(FacesMessage.SEVERITY_ERROR, "Fail", null));
    }
}

<h:messages id="messages" />
<p:commandLink process="@form" action="#{bean.submit}" update="messages something" />

请注意,您还应该使用普通的Validator 实现来执行验证。如果它抛出ValidatorException,那么无论如何都不会调用该操作。在 action 方法中进行验证是一种味道。

【讨论】:

  • 我试图做相反的事情:只有在验证成功时才更新。
  • 做同样的事情,但是使用SEVERITY_INFO 代替“成功”消息。当验证失败时,无论如何都不会调用 action 方法。另一种方法是让操作方法设置一些属性并使用rendered="#{not empty bean.someProperty}"
  • @BalusC 最后建议的另一个变体:动作监听器中的FacesCopntext.getPartialViewContext().getRenderIds().add("updateComponentId")。仅在验证成功时执行。
  • 你能否详细说明一下代码。我无法理解当验证失败时如何有条件地更新我想更新 2 个组件但如果验证成功我想更新 3 个组件。 .. 2 个以前的和一个额外的.. 请帮助\
  • 我认为message 的建议不一定能回答所提出的问题。假设他想更新 message 以外的其他内容?我自己没有尝试过,但另一种可能有效的方法是使用remotecommand
猜你喜欢
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 2017-01-27
  • 1970-01-01
  • 2012-01-30
相关资源
最近更新 更多