我在这根绳子的尽头。我是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
中的字段为什么动作(按钮的属性)不起作用?
答案 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'}">