简要用例描述:
用户到达页面:http://localhost:8080/.../show.xhtml?itemId=1
。MyShowBean
是一个 @RequestScoped JSF 托管 Bean,它通过获取 id<f:viewParam.../>
并在数据库中查找项目:
<f:metadata>
<f:viewParam name="itemId" value="#{showBean.itemId}">
<f:convertNumber integerOnly="#{true}"/>
</f:viewParam>
</f:metadata>
<f:event type="preRenderView" listener="#{showBean.init()}"/>
用户还可以编辑显示的项目。我想ItemEditBean
按需构建@ViewScoped(通过单击“编辑”按钮)。为了实现这一点,我做了以下事情:
<p:commandButton value="Edit" oncomplete="editWidget.show()" update=":itemEditForm">
<f:setPropertyActionListener target="#{itemEditBean.id}" value="#{showBean.itemId}"/>
</p:commandButton>
我的问题是:有没有更好的方法将 itemId 传递给 @ViewScoped bean?
编辑:
执行按钮itemEditBean.fetch(id)
操作p:command
不会在页面呈现时初始化 @ViewScoped bean。
<p:commandButton value="Edit" oncomplete="editWidget.show()" update=":itemEditForm" action="#{itemEditBean.fetchItem(showBean.itemId)}"/>
.
使用上面的代码 itemEditBean 可以按需构建。