1

我已经走到了尽头。我是 JSF 的新手,所以这可能是我对很多东西的误解。

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

我将页面传递给某种类型,它显示表单的某些字段/标准,并且 bean 支持这一切,因为只有一个搜索。

在 myPage.jspx 我有:

action="#{MyBean.submitForm}"

不起作用,尽管 onsubmit="alert('hi');" 确实作为表单元素的属性工作。

我想最令人困惑的是

valueChangeListener="#{MyBean.stateChanged}"

确实适用于 myPage.jspx 中的字段

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

4

1 回答 1

1

在处理表单提交期间,如果按钮或其父组件之一不是rendered,则不会调用按钮的操作。您需要确保rendered在处理表单提交期间属性的评估与显示表单时的评估相同。在您的情况下,您取决于 name 的请求参数的值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'}">

也可以看看:

于 2012-02-07T21:21:55.333 回答