Jsf 当h:SelectOne菜单值更改时,如何使所需信息消失?

Jsf 当h:SelectOne菜单值更改时,如何使所需信息消失?,jsf,messages,Jsf,Messages,我在清除所需消息时遇到问题。 我有一个表单,其中有几个字段和一个按钮。 当我按下按钮时,会进行验证,检查是否需要字段,如果不需要,则会显示无效值/组件的消息。 现在,我想从selectOneMenu中选择一个值,或者在inputText中键入一些内容,当我这样做时,我希望所需的消息消失,而无需再次按下按钮 你会怎么做? 我试图用这样的方式删除邮件,但似乎不起作用: Iterator<FacesMessage> msgIterator = FacesContext.getCurrent

我在清除所需消息时遇到问题。 我有一个表单,其中有几个字段和一个按钮。 当我按下按钮时,会进行验证,检查是否需要字段,如果不需要,则会显示无效值/组件的消息。 现在,我想从selectOneMenu中选择一个值,或者在inputText中键入一些内容,当我这样做时,我希望所需的消息消失,而无需再次按下按钮

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

Iterator<FacesMessage> msgIterator = FacesContext.getCurrentInstance().getMessages();
while (msgIterator.hasNext())
{
    FacesMessage facesMessage = msgIterator.next();
    msgIterator.remove();
}
迭代器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>

...

您可以使用
包装邮件,并通过此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;”“
对于

它与
f:ajax
一起工作吗?如果不是,它与PrimeFaces无关(我认为不是),没有PrimeFaces它也可以工作,但是连接到commandButton的ajax不是问题所在。问题是当值发生变化时,如何在不使用commandButton的情况下使所需的消息消失。我知道,但我询问了与标记相关的问题。。只要jsf标签就足够了,或者jsf-2;-)。选中此项:好的,我将检查此链接并让您知道结果。您基本上是说
不起作用?如果您试图呈现由于style=“display:none;”而未显示在表单上的未识别Id(msgId),则无法使用此组件进行操作。所以要解决这个问题,你需要一个可以随时操作的组件。。。解决此问题,因为始终显示在第页上。