将JSF bean绑定到包含的JSF

时间:2012-02-07 21:14:56

标签: jsf facelets backing-beans

我在这根绳子的尽头。我是JSF的新手,所以这可能是我对很多东西的误解。

<ui:composition>
    <f:view>
         <tr:form>
             <ui:fragment rendered="#{param['type'] eq 'myType'}">
                <ui:include src="/home/myPage.jspx" />
            </ui:fragment>
        ......

我将页面传递给某个类型,它会显示某个表单的某些字段/条件,而be​​an会将其全部备份,因为只有一次搜索。

在myPage.jspx中我有:

action="#{MyBean.submitForm}"

不起作用,虽然onsubmit =“alert('hi');”确实可以作为表单元素的属性。

我想最令人困惑的是

valueChangeListener="#{MyBean.stateChanged}"

适用于myPage.jspx

中的字段

为什么动作(按钮的属性)不起作用?

1 个答案:

答案 0 :(得分:1)

在处理表单提交期间,如果按钮或其某个父组件不是rendered,则不会调用该按钮的操作。在处理表单提交期间,您需要确保rendered属性在显示表单时进行评估。在您的情况下,您依赖于名为type的请求参数的值。

在这种特殊情况下,您可以通过嵌套在命令按钮中的type保留请求参数<f:param>来解决问题:

<h:commandButton ...>
    <f:param name="type" value="#{param.type}" />
</h:commandButton>

或者,如果您正在使用JSF 2.0,那么将bean放在视图范围中并通过type在托管bean中设置<f:viewParam>参数也可以解决它。

<f:metadata>
    <f:viewParam name="type" value="#{bean.type}" />
</f:metadata>

...

<ui:fragment rendered="#{bean.type eq 'myType'}">

另见: