2014-01-25 4 views
0

Я пытаюсь реализовать немедленный выбор строки в файле данных PrimeFaces 4, который выдает диалог с деталями из выбранной строки.outputText не вызывает метод being bean

Соответствующие фрагменты кода:

Datatable:

<p:dataTable id="Table" 
    var="user" rowKey="#{user.id}" 
    selection="#{userDAO.selectedComplaintRow}" 
    selectionMode="single" value="#{userDAO.complaintList}" 
    style="font-size:10px;"> 
<p:ajax event="rowSelect" listener="#{userDAO.onRowSelect}" 
    update=":form:Table, :form:messages" 
    oncomplete="PF('showComplaint').show()" /> 
... 

Диалог:

<p:dialog header="Details" widgetVar="showComplaint" 
    id="dialog" resizable="false" width="400" showEffect="explode" 
    modal="true" hideEffect="explode"> 

    <h:panelGrid columns="3" cellpadding="5"> 
     <h:outputText value="Forename: " /> 
     <h:outputText value="#{userDAO.selectedComplaintRow.getForename()}" /> 

    </h:panelGrid> 
</p:dialog> 

UserDAO.onRowSelect():

public void onRowSelect(SelectEvent event) { 
    FacesMessage msg = new FacesMessage("User Selected", "Selected!"); 

    FacesContext.getCurrentInstance().addMessage(null, msg); 
} 

UserDAO Методы получения и установки:

public void setSelectedComplaintRow(User selectedComplaintRow) { 
    this.selectedComplaintRow = selectedComplaintRow; 
    System.out.println("Passed forename: " + this.selectedComplaintRow.getForename()); 
} 

public User getSelectedComplaintRow() { 
    System.out.println("Retrieved forename: " + this.selectedComplaintRow.getForename()); 
    return this.selectedComplaintRow; 
} 

геттер пользователя и сеттер:

public String getForename() { 
    return this.forename; 
} 

public void setForename(String forename) { 
    this.forename = forename; 
} 

В то время как (старая школа) System.out.println() получает Forename успешно от примитива пользователя и выводит его на консоль Eclipse, когда откроется диалоговое окно, то пространство справа от «Forename:» пустое, как если бы NULL был принят с привязкой #{userDAO.selectedComplaintRow.getForename()}.

Оба типа данных и диалог находятся в пределах одних и тех же тегов.

Что может быть причиной этого?

+0

КСТАТИ бин @ViewScoped – hurleytom

+0

Я также попытался <ч: outputText значение = "# {userDAO.selectedComplaintRow.forename}" /> с теми же результатами. – hurleytom

+0

Вызывается метод setSelectedComplaintRow()? Где находится тег h: form? – scraatz

ответ

0

Чтобы решить эту проблему, я сделал так, как предложил @scraatz и добавил update=":form:dialog" к событию rowSelect АЯКС, как показано ниже:

<p:ajax event="rowSelect" listener="#{bigComplaintsDAO.onRowSelect}" 
    update=":form:ComplaintTable, :form:messages, :form:dialog" 
    oncomplete="PF('showComplaint').show()" /> 

Это, как представляется, чтобы обновить диалоговое окно после того, как данные были переданы ему, в то время как без этого, диалог загружается до передачи каких-либо данных и не обновляется, когда данные затем передаются ему #{userDAO.selectedComplaintRow.forename}.

Смежные вопросы