【问题标题】:How to fetch validation error messages using FacesContext?如何使用 FacesContext 获取验证错误消息?
【发布时间】:2013-06-04 20:55:02
【问题描述】:

我的 xhtml 包含输入字段,用户可以在其中输入数字或字母值。使用 ajax 调用我正在验证输入值并在 .但即使在输入无效字符和错误消息后,用户仍可能点击“保存”按钮。一旦用户点击 Save 按钮,它就会触发 Controller 中的一个方法。有没有办法可以使用 FacesContext.getCurrentInstance() 检查控制器内部 p:messages 上的验证错误。

xhtml代码

    <!-- Messages -->       

    <p:messages id="errorMessages" globalOnly="false" showDetail="true" showSummary="false" closable="true" />  
<!-- Column input field-->
    <p:column>
        <f:facet name="header">
            <h:outputText value="Input Amount" escape="false" />
        </f:facet>
        <p:cellEditor>

            <f:facet name="output">
                <h:outputText value="#{row.amount}" escape="false">
                    <f:convertNumber maxFractionDigits="3" minFractionDigits="3"
                        maxIntegerDigits="5" />
                </h:outputText>
            </f:facet>
            <f:facet name="input">
                <p:inputText id="input" value="#{row.amount}" maxlength="10"
                    size="10">
                    <f:convertNumber maxFractionDigits="3" minFractionDigits="3"
                        maxIntegerDigits="5" />
                    <f:validator validatorId="hourlyValueValidator" for="input" />
                    <p:ajax event="change" partialSubmit="true" process="input"
                        update=":#{p:component('errorMessages')}" />
                </p:inputText>
            </f:facet>
        </p:cellEditor>
    </p:column>


<!-- Save Button -->

    <p:commandButton id="btnSubmit" value="Save"        
    update=":#{p:component('tblScrollPnl')} :#{p:component('errorMessages')}"
    action="#{controller.saveValues()}" ajax="true" />

ViewScope 中的控制器

   public void saveValues() throws Exception {

  FacesContext context = FacesContext.getCurrentInstance();
  List<FacesMessage> errorMsgList = context.getMessageList("globalMessages");
  ......
  ......
  ......
  }

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

    您不需要从 bean 端获取消息进行验证,正如您所体验的那样,视图端验证会发生但不会阻止您的操作。

    您认为有几个问题,要解决您的问题,您需要更改p:commandButtonprocess 属性,否则只处理按钮(默认为process="@this",因此跳过验证.

    <p:commandButton id="btnSubmit" value="Save" process="@form" update=":tblScrollPnl :errorMessages" action="#{controller.saveValues()}" />
    

    还请注意,我已删除 ajax="true",因为它是默认设置并修复了 update="" 中的主要问题。

    您还应该重新排列您的验证器:

    <p:inputText id="input" value="#{row.amount}" maxlength="10" size="10" validator="hourlyValueValidator">
        <f:convertNumber maxFractionDigits="3" minFractionDigits="3" maxIntegerDigits="5" />
    </p:inputText>
    

    【讨论】:

    • 感谢您的建议。让他们做出改变。仍然页面提交无效字符。在我的数据表列中,我使用 cellEditor。当用户点击提交按钮页面时,它可能会阻止验证输入字段。
    • 感谢您的提问。将屏幕更改为以不同的方式运行。如果发生任何验证错误,则禁用提交按钮。
    猜你喜欢
    • 2017-10-29
    • 2012-11-05
    • 1970-01-01
    • 2016-05-27
    • 2013-06-08
    • 1970-01-01
    • 2019-02-01
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多