[英]JSF Output not coming as expected by using commandLink, ViewScope in dataTable
以下是我的文件。
<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
。
但问题是
要重新定向viewStaffMemberProfileData.xhtml
页面,我必须单击链接(名称1,名称2等)两次:(
当我重新定向到viewStaffMemberProfileData.xhtml
我只看到输出为
My Name is --
我想要的是My Name is -XXXYYYZZZZ-
。
建议我哪里出错了。
我在ViewScope
拥有所有bean。
@prajeeshkumar
吸气剂定位器如下
public List<NewStaffMemberDataBean> getNewStaffMemberDataBeanList() {
return newStaffMemberDataBeanList;
}
public void setNewStaffMemberDataBeanList(List<NewStaffMemberDataBean> newStaffMemberDataBeanList) {
this.newStaffMemberDataBeanList = newStaffMemberDataBeanList;
}
这种行为的原因是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
中,以便做一些初始化...
要么
你可以将newStaffMemberServiceBean的范围转换为SessionScope ...
如果在视图范围内有newStaffMemberServiceBean
,那么当您要访问另一个页面(视图)时,该bean是否可以在该范围内使用? 我的意思manageStaff.xhtml
viewStaffMemberProfileData.xhtml
将有一个实例, viewStaffMemberProfileData.xhtml
将有另一个实例。 您的解决方案是使用会话范围或使用h:link
或h:outputLink
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.