【问题标题】:How to make required message dissapear when h:selectOneMenu value is changed?更改 h:selectOneMenu 值时如何使所需消息消失?
【发布时间】:2015-11-25 10:01:02
【问题描述】:

我无法删除必填消息。 我有一个表单,其中有几个字段和一个按钮。 当我按下按钮时,将进行验证,检查是否必填字段填充了值,如果没有,则显示无效值/组件的必填消息。 现在我想从 selectOneMenu 中选择一个值或在 inputText 中输入一些内容,当我这样做时,我希望所需的消息消失,而无需再次按下按钮。

你会怎么做? 我试图用这样的方式删除消息,但它似乎不起作用:

Iterator<FacesMessage> msgIterator = FacesContext.getCurrentInstance().getMessages();
while (msgIterator.hasNext())
{
    FacesMessage facesMessage = msgIterator.next();
    msgIterator.remove();
}

你能帮我解决这个问题吗?

这里是示例代码:

<h:form id="mainForm">
<h:selectOneMenu required="true" id="dictionaryValueId" value="#{SomeBean.dictionarySelectedValue}">
    <f:selectItem itemValue="#{null}" itemLabel="#{i18n['view.choose']}" />
    <f:selectItems value="#{SomeBeanBean.dictionaryValuesMap}" var="element"
        itemLabel="#{element.descripption}" itemValue="#{element.key}" />
    <f:ajax event="change" execute="@this msgId" render="msgId dictionaryValueId"/>
</h:selectOneMenu>
<h:message id="msgId" style="display:none;" for="dictionaryValueId" />
...

<h:commandButton value="#{i18n['button.forward.name']}"
        actionListener="#{SomeBean.forward}" >
        <p:ajax process="@form" update="mainForm"/>
</h:commandButton>

【问题讨论】:

  • 它可以与f:ajax 一起使用吗?如果不是,则与 PrimeFaces 无关(我认为不是)
  • 它可以在没有 primefaces 的情况下工作,但附加到 commandButton 的 ajax 不是问题。问题是如何在值更改时不使用 commandButton 使所需的消息消失。
  • 我知道,但我询问了与标记有关的问题。仅 jsf 标记就足够了,或者 jsf-2 ;-)。检查了这个:stackoverflow.com/questions/32400491/…stackoverflow.com/questions/6642242/…
  • 好的,我会检查这个链接,让你知道结果如何。
  • 所以你基本上是说&lt;f:ajax render="msgId"&gt; 没用?

标签: jsf messages


【解决方案1】:

我不确定,但没有问题 style="display:none;"
为了 &lt;h:message id="msgId"/&gt;

【讨论】:

    【解决方案2】:

    您可以使用&lt;h:panelGroup/&gt; 包装您的消息并通过此 panelGroup Id 呈现,此 Id 将始终出现在您的表单上。

    <h:form id="mainForm">
       <h:selectOneMenu required="true" id="dictionaryValueId" value="#{SomeBean.dictionarySelectedValue}">
        <f:selectItem itemValue="#{null}" itemLabel="#{i18n['view.choose']}" />
        <f:selectItems value="#{SomeBeanBean.dictionaryValuesMap}" var="element" itemLabel="#{element.descripption}" itemValue="#{element.key}" />
        <f:ajax event="change" execute="@this" render="messageBundle1 dictionaryValueId"/>
       </h:selectOneMenu>
       <h:panelGroup id="messageBundle1">
          <h:message id="msgId" style="display:none;" for="dictionaryValueId" />
       </h:panelGroup>
    
    <h:commandButton value="#{i18n['button.forward.name']}"
            actionListener="#{SomeBean.forward}" >
            <p:ajax process="@form" update="mainForm"/>
    </h:commandButton>
    </h:form>
    

    【讨论】:

    • 如果您尝试呈现由于 style="display:none;" 而无法在表单上显示的无法识别的 Id(msgId)您不能使用此组件进行操作。因此,要解决此问题,您需要始终可以操作的组件。 ... 解决这个问题,因为它总是出现在页面上。
    猜你喜欢
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多