繁体   English   中英

通过在dataTable中使用commandLink,ViewScope,JSF输出未达到预期效果

[英]JSF Output not coming as expected by using commandLink, ViewScope in dataTable

以下是我的文件。

manageStaff.xhtml

<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>

viewStaffMemberProfileData.xhtml

 My Name is -<h:outputText value="#{newStaffMemberServiceBean.userId}" />-

NewStaffMemberServiceBean.java

@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.xhtmlviewStaffMemberProfileData.xhtml

问题是

  1. 要重新定向viewStaffMemberProfileData.xhtml页面,我必须单击链接(名称1,名称2等)两次:(

  2. 当我重新定向到viewStaffMemberProfileData.xhtml我只看到输出为

    My Name is --

    我想要的是My Name is -XXXYYYZZZZ-

建议我哪里出错了。

注意

我在ViewScope拥有所有bean。

更新1

@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中,以便做一些初始化...

基于这篇BalusC的伟大文章 - JSF 2.0中的通信

要么

你可以将newStaffMemberServiceBean的范围转换为SessionScope ...

如果在视图范围内有newStaffMemberServiceBean ,那么当您要访问另一个页面(视图)时,该bean是否可以在该范围内使用? 我的意思manageStaff.xhtml viewStaffMemberProfileData.xhtml将有一个实例, viewStaffMemberProfileData.xhtml将有另一个实例。 您的解决方案是使用会话范围或使用h:linkh:outputLink

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM