我在h:form组件中有一个p:selectOneMenu组件,如:
<p:selectOneMenu id="scroll" rendered="#{projectPageBean.rendered}"
value="#{projectPageBean.selectedInstrument}">
<f:selectItems value="#{projectPageBean.instruments}"/>
<p:ajax event="change" listener="#{projectPageBean.valueChanged}" update="test" />
</p:selectOneMenu>
在同一表格中,我定义了一个p:commandButton组件:
<p:commandButton id="test"
value="View Instrument"
action="#{projectPageBean.getPage}"
update="@this,:add-instrument-dialog-form:scrolladd"/>
根据selecOneMenu中的selectedInstrument,导航到p:commandButton的action属性应该是不同的。
托管bean projectPageBean是请求范围。
这是可行的还是我应该采用不同的方法?
答案 0 :(得分:0)
在实际表单提交请求期间评估action
属性。由于这种情况发生在与您已更改它的请求不同的请求中,并且由于您的bean是请求作用域,因此它将失败。 bean即重建,所有属性都设置为默认值。
您需要将bean放在视图范围内,以使此构造生效。
@ManagedBean
@ViewScoped
public class ProjectPageBean {}
或者,如果getPage()
仅返回String
,则改为使用<p:button>
。
<p:button ... outcome="#{projectPageBean.page}" />
在呈现HTML输出期间评估outcome
属性,因此它在这样的构造中可以正常工作。