通过ajax更新p:commandButton操作不会以调用的正确操作结束

时间:2013-06-26 13:34:31

标签: ajax jsf primefaces action

我在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是请求范围。

这是可行的还是我应该采用不同的方法?

1 个答案:

答案 0 :(得分:0)

在实际表单提交请求期间评估action属性。由于这种情况发生在与您已更改它的请求不同的请求中,并且由于您的bean是请求作用域,因此它将失败。 bean即重建,所有属性都设置为默认值。

您需要将bean放在视图范围内,以使此构造生效。

@ManagedBean
@ViewScoped
public class ProjectPageBean {}

或者,如果getPage()仅返回String,则改为使用<p:button>

<p:button ... outcome="#{projectPageBean.page}" />

在呈现HTML输出期间评估outcome属性,因此它在这样的构造中可以正常工作。

另见: