【问题标题】:jsf component.valid first time entering the pagejsf component.valid 第一次进入页面
【发布时间】:2015-12-20 21:08:47
【问题描述】:

验证未通过时,我在输入字段旁边显示一个小图标。我可以做到,但我希望有比目前更好的解决方案:

<p:inputText ... binding="#{myfield}">
    <f:validator binding="#{myfieldValidator}"/>
    <f:ajax event="blur" render="myfieldFeedback"/>
</p:inputText>


<h:panelGroup id="myfieldFeedback">
    <div class="failedIndicator colorRed" jsf:rendered="#{myFieldvalidator.isIndicatorvisible.myFieldfailed}">!</div>
    <div class="successIndicator" jsf:rendered="#{myFieldValidator.isIndicatorVisible.myFieldSuccess}">v</div>
</h:panelGroup>

在我的验证器中:

    private Map<String, Boolean> isIndicatorVisible;
    isIndicatorVisible.put("myFieldSuccess", false);//if validation succeeds goes to true
    isIndicatorVisible.put("myFieldFailed", false);// opposite of above

我希望有一个更好的解决方案(不使用地图),如下所示:

<h:panelGroup id="myfieldFeedback">
    <div class="#{myfield.valid ? 'successIndicator' : 'noDisplay'}">v</div>
    <div class="#{myfield.valid ? 'noDisplay' : 'failedIndicator colorRed'}">!</div>
</h:panelGroup>

第一次进入显示表单的对话框时,该字段有效。因此有一个我不希望显示的有效反馈。

【问题讨论】:

  • 你能试试

标签: validation jsf


【解决方案1】:

因此,您希望确保仅在回发请求期间而不是在初始 (GET) 请求期间评估条件。你可以通过FacesContext#isPostback()查看。

<h:panelGroup id="myfieldFeedback">
    <ui:fragment rendered="#{facesContext.postback}">
        <div class="...">v</div>
        <div class="...">!</div>
    </ui:fragment>
</h:panelGroup>

【讨论】:

  • 谢谢,尽管我不会使用它,因为我的对话是动态的。我想我会在我的豆子里放一个计数器或其他东西。很高兴知道这一点。
  • 如果初始请求本身也是回发(例如,因为它在对话框中),那么您将相应地更改 rendered 属性中的条件,例如检查提交/按下了哪个表单和/或按钮。
  • 这听起来比我的地图 indd 好
猜你喜欢
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 2014-06-21
  • 2013-05-16
相关资源
最近更新 更多