1

我有 2 个命令按钮和一个选择一个菜单。我需要根据选定的按钮和菜单中当前选定的项目调用 bean 方法。

<h:form id="form1">
    <h:outputLabel value="menu:" /> 
    <h:commandButton  value ="en" action="#{bean.exec}" >
        <f:setPropertyActionListener target="#{bean.menu}" value='en' />
    </h:commandButton>
    <h:commandButton value ="fr" action="#{bean.exec}" >
        <f:setPropertyActionListener target="#{bean.menu}" value='fr' />
    </h:commandButton>      

    <h:outputLabel value="id:" />
    <h:selectOneMenu value="#{bean.id}">
        <f:selectItems value="#{bean.idlist}" />
        <f:ajax listener="#{bean.exec}" render ="form1" />
    </h:selectOneMenu>
</h:form>

但是,虽然第一个按钮更新了我的属性并调用了操作方法,但第二个按钮给了我以下消息

警告:FacesMessage(s) 已入队,但可能尚未显示

并且视图不会在第一次单击时更新。但是,在第二次单击时,属性会立即更新,视图也会更新。

这是如何引起的,我该如何解决?

4

1 回答 1

0

我确实看到了日志,但是我不明白错误:这是它显示的内容:form1:j_idt124:验证错误:值无效什么值和在哪里?

<h:message>如果您为所有输入组件提供一个 ID 并按如下方式附加到它们,则更容易识别该值:

<h:outputLabel for="id" value="id:" />
<h:selectOneMenu id="id" value="#{bean.id}">
    <f:selectItems value="#{bean.idlist}" />
    <f:ajax listener="#{bean.exec}" render ="form1" />
</h:selectOneMenu>
<h:message for="id" />

这样,您将获得form1:id标签而不是form1:j_idt124. 或者,您还可以指定label输入组件的:

<h:selectOneMenu label="id" ... />

至于“值无效”错误,当在处理表单提交过程中选择的值与任何一个可用值不匹配时,您将收到此错误。#{bean.idlist}当处理表单提交期间后面的属性发生不兼容的更改时,就会发生这种情况。当 bean 是请求范围时,这又会发生。将 bean 放在视图范围内应该可以修复它。

也可以看看:

于 2013-02-06T16:49:11.540 回答