1

我在 ah:form 组件中有 ap: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>

在同一个表单中,我定义了 ap: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 是请求范围的。

这是可行的还是我应该尝试不同的方法?

4

1 回答 1

0

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

您需要将 bean 放在视图范围内才能使此构造工作。

@ManagedBean
@ViewScoped
public class ProjectPageBean {}

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

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

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

也可以看看:

于 2013-06-26T13:40:04.673 回答