3

DatatableとDialogを一緒に使用すると大きな問題が発生します。

データテーブルの行をクリックして、データテーブルの選択したアイテムからデータをロードするダイアログを表示する必要があります。

選択はうまくいきますが、ダイアログが表示されるとすぐに、選択された要素はnullに設定されます:/

ここにいくつかのコードがあります:

<h:form id="form">  
                    <pou:dataTable widgetVar="conv" id="mex" var="conv" value="#{messagesBean.listaConversazioni}" paginator="true" rowKey="#{conv}" paginatorPosition="bottom"  
                                   selection="#{messagesBean.destinatario}"  selectionMode="single" rows="15">  
                        <pou:ajax event="rowSelect" 
                                  oncomplete="convDialog.show()" update=":form:display, :growl, :menuPanel" />  
                        <pou:column>
                            <f:facet name="header">
                                <h:outputText value="Conversazioni"/>                                                                        
                            </f:facet>
                            <h:outputText value="#{conv.username}"/>                                
                        </pou:column>  
                    </pou:dataTable>                     

                    <pou:dialog id="convDialog" header="Conversazione" widgetVar="convDialog" onHide="conv.unselectAllRows()" position="center" modal="true" resizable="false" draggable="false"  
                                showEffect="explode" hideEffect="explode" height="635" width="620">                                  
                        <h:panelGrid id="display">
                            <pou:panel id="postForm">
                                <div align="center">
                                    <pou:inputTextarea value="#{messagesBean.messaggio}" cols="50" autoResize="true" maxlength="255"/> <br/>
                                    <pou:commandButton  action="#{messagesBean.invia(messagesBean.destinatario)}" value="Invia" update="display, :growl"/>
                                </div>   
                            </pou:panel>             
                            <pou:panel>
                                <div class="conversazionePanel">
                                    <pou:dataTable id="mexTable" var="mex" value="#{messagesBean.caricaConversazione(messagesBean.destinatario)}" rowStyleClass="postTable">                                         
                                        <pou:column style="border: none; background: rgba(0,0,0,0)">  
                                            <div id="messaggio_#{mex.idMessaggio}">
                                                <pou:outputPanel rendered="#{mex.mittente eq loginBean.utente}">
                                                    <pou:panelGrid columns="2">
                                                        <h:outputText value="Io"/>
                                                        <div class="messaggioInviato">#{mex.testo}</div>
                                                    </pou:panelGrid> 
                                                </pou:outputPanel> 
                                                <pou:outputPanel rendered="#{mex.destinatario eq loginBean.utente}">                                                                                                                                                
                                                    <pou:panelGrid columns="2">
                                                        <div class="messaggioRicevuto">#{mex.testo}</div>
                                                        <h:outputText value="#{mex.mittente.username}"/>
                                                    </pou:panelGrid>                                                                                                
                                                </pou:outputPanel>                                                 
                                            </div>
                                        </pou:column>                                        
                                    </pou:dataTable>   
                                </div>
                            </pou:panel>                            
                        </h:panelGrid>                                                                                    
                    </pou:dialog>                        
                </h:form>

_

#{messagesBean.listaConversazioni}ユーザーのリストを返します

_

#{conv}ユーザーです

_

#{messagesBean.destinatario}設定する必要のあるユーザーです。行をクリックするとconvの値を取りますが、突然nullになります。

奇妙な考えはそれです

<pou:dataTable id="mexTable" var="mex" value="#{messagesBean.caricaConversazione(messagesBean.destinatario)}"

一方、同じダイアログで

<h:outputText value="#{messagesBean.destinatario==null}">

trueを出力します:\

どうしたの ?

4

2 に答える 2

0

この投稿が古いことは知っていますが、これと同じシナリオが何度も発生しており、99% の時間で @RequestScoped Bean を使用して選択内容を保存しているという問題があります。Request Scoped Bean は選択された行で埋められますが、その後破棄されます。したがって、ダイアログを開きたい場合は、空の選択で新しい RequestScoped Bean が作成されます。選択を保持しているバッキング Bean を @ViewScoped に変更してみてください。問題は解決するはずです。

于 2018-07-23T17:23:55.910 に答える