Выходные данные JSF не приходят должным образом с помощью commandLink, ViewScope в dataTable - PullRequest
0 голосов
/ 12 марта 2012

Ниже приведены файлы, которые у меня есть.

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

НО проблемы

  1. Чтобы перенаправить на страницу viewStaffMemberProfileData.xhtml, мне нужно дважды щелкнуть ссылку (Имя 1, Имя 2 и т. Д.): (

  2. Когда я перенаправлен на viewStaffMemberProfileData.xhtml, я вижу только вывод как

    My Name is --

    То, что я хочу, это My Name is -XXXYYYZZZZ-.

Подскажите, где я иду не так.

Примечание

У меня есть все бобы в ViewScope.

Обновление 1

@ prajeeshkumar

Установщик геттера, как показано ниже

    public List<NewStaffMemberDataBean> getNewStaffMemberDataBeanList() {
    return newStaffMemberDataBeanList;
    }

    public void setNewStaffMemberDataBeanList(List<NewStaffMemberDataBean> newStaffMemberDataBeanList) {
    this.newStaffMemberDataBeanList = newStaffMemberDataBeanList;
    }

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

Причиной такого поведения является область просмотра 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 ...

0 голосов
/ 12 марта 2012

Если у вас есть newStaffMemberServiceBean в области видимости, то когда вы переходите на другую страницу (представление), будет ли этот компонент доступен в этой области? Я имею в виду, что у manageStaff.xhtml будет один экземпляр, а у viewStaffMemberProfileData.xhtml - другой. Ваше решение здесь будет использовать область сеанса или h:link или h:outputLink

...