第二次单击时调用按钮操作

时间:2013-02-06 15:25:34

标签: button jsf-2

我有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>

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

  

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

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

这是如何引起的?如何解决?

1 个答案:

答案 0 :(得分:0)

  

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

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

<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放在视图范围内应该修复它。

另见: