以下是我的文件。
<h:dataTable var="c" value="#{newStaffMemberServiceBean.newStaffMemberDataBeanList}"
styleClass="order-table"
headerClass="order-table-header"
rowClasses="order-table-odd-row,order-table-even-row"
border="1" id="staffListDataTable" width="100%">
<h:column>
<f:facet name="header">
Staff Member Name
</f:facet>
<h:form>
<h:commandLink action="viewStaffMemberProfileData" value="#{c.firstName}">
<f:setPropertyActionListener target="#{newStaffMemberServiceBean.userId}" value="XXXYYYZZZZ"/>
</h:commandLink>
</h:form>
</h:column>
</h:dataTable>
My Name is -<h:outputText value="#{newStaffMemberServiceBean.userId}" />-
@ManagedBean(name = "newStaffMemberServiceBean")
//@RequestScoped
@ViewScoped
//@SessionScoped
public class NewStaffMemberServiceBean {
private String userId;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
在输出中,我得到的是格式
Staff Member Name
++++++++++++++++++
Name 1
Name 2
Name 3
.
.
.
.
点击Name 1
时,我会被重定向到viewStaffMemberProfileData.xhtml
。
但是 问题
要重新定位viewStaffMemberProfileData.xhtml
页面,我必须点击两次链接(名称1,名称2等):(
当我重新定向到viewStaffMemberProfileData.xhtml
时,我只看到输出为
My Name is --
我想要的是My Name is -XXXYYYZZZZ-
。
建议我哪里出错了。
我有 ViewScope
中的所有bean。
@prajeeshkumar
Getter setter如下
public List<NewStaffMemberDataBean> getNewStaffMemberDataBeanList() {
return newStaffMemberDataBeanList;
}
public void setNewStaffMemberDataBeanList(List<NewStaffMemberDataBean> newStaffMemberDataBeanList) {
this.newStaffMemberDataBeanList = newStaffMemberDataBeanList;
}
答案 0 :(得分:2)
此行为的原因是newStaffMemberServiceBean的视图范围,它被销毁并再次创建...因此该值无效......这里是另一种解决方案:
没试过这个,但值得一试
更改
<h:commandLink action="viewStaffMemberProfileData" value="#{c.firstName}">
<f:setPropertyActionListener target="#{newStaffMemberServiceBean.userId}" value="XXXYYYZZZZ"/>
</h:commandLink>
到
<h:link value="#{c.firstName}" outcome="nameOfXhtmlGoesHere">
<f:param name="id" value="XXXYYYZZZZ" />
</h:link>
和viewStaffMemberProfileData.xhtml
在<h:head>
<f:metadata>
<f:viewParam name="id" value="#{newStaffMemberServiceBean.userId}" />
</f:metadata>
您还可以将<f:event type="preRenderView" listener="#{newStaffMemberServiceBean.init}" />
添加到f:metadata
以执行某些初始化...
基于此BalusC great article - Communication in JSF 2.0
或强>
您可以将newStaffMemberServiceBean的范围转换为SessionScope ...
答案 1 :(得分:0)
如果您在视图范围内有newStaffMemberServiceBean
,那么当您要访问其他页面(视图)时,该范围内的该bean是否可用?我的意思是manageStaff.xhtml
将有一个实例,viewStaffMemberProfileData.xhtml
将有另一个实例。此处的解决方案将使用会话范围或使用h:link
或h:outputLink