Primefaces Datatable 的 ContextMenu 只更新第一次,下次就不起作用了

问题描述 投票:0回答:1

我在 Primefaces 数据表内的 Primefaces ContextMenu 上遇到问题。

当我单击上下文菜单的唯一条目时,这会更新对话框内的面板并显示对话框。第一次它工作得很好,但在下一次面板没有更新,我不知道为什么。

米xhtml

<p:dataTable id="listadoJuegos" widgetVar="listadoJuegosWV" stickyHeader="true" stickyTopAt=".layout-topbar"
            value="#{juegosBean.listaJuegos}" var="juego" rowIndexVar="index" selectionMode="single" selection="#{juegosBean.juegoSeleccionado}"
            emptyMessage="#{messages['listado.VACIO']}" rows="10" rowKey="#{juego.idJuego}"
            styleClass="grupoCentrado" style="width:100%;" paginator="true" paginatorPosition="bottom"
            paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
            currentPageReportTemplate="{startRecord}-{endRecord} de {totalRecords} registros">

....

</p:dataTable>
        
        <p:contextMenu for="listadoJuegos" styleClass="contextMenu">
            <p:menuitem value="#{messages['listado.acciones.EDITAR']}" icon="pi pi-file-o" update="form:detalleJuego" actionListener="#{juegosBean.accionEditarJuego}" oncomplete="PF('editarJuegoDialog').show();"/>
        </p:contextMenu>
        
        <p:dialog header="#{messages['juego.editar.HEADER']}" widgetVar="editarJuegoDialog" modal="true" showEffect="fade"
                  hideEffect="fade" resizable="false">
            <p:outputPanel id="detalleJuego" style="text-align:center;">
                <p:column rendered="#{not empty juegosBean.juegoSeleccionado}">
                    <p:panelGrid columns="2">
                        <h:outputText value="#{messages['listado.NOMBRE']}"/>
                        <p:inputText value="#{juegosBean.juegoSeleccionado.nombre}"/>
                    </p:panelGrid>
                </p:column>
            </p:outputPanel>
        </p:dialog>

米豆

@ManagedBean(name = "juegosBean")
@ViewScoped
public class JuegosBean implements Serializable{
    
    private static final Logger LOGGER = Logger.getLogger(JuegosBean.class);
    
    private static final long serialVersionUID = -5102818290267794138L;

    private List<Juego> listaJuegos;
    
    @ManagedProperty("#{fachada}")
    private Fachada fachada;
    
    private Juego juegoSeleccionado;
    
    
    @PostConstruct
    public void init() {
        listaJuegos = fachada.obtenerJuegos();
        Collections.sort(listaJuegos, new Comparator<Juego>() {

            @Override
            public int compare(Juego juego, Juego juego2) {
                return juego.getPosicion().compareTo(juego2.getPosicion());
            }
            
        });
    }
    
    public void accionEditarJuego() {

    }

    public List<Juego> getListaJuegos() {
        return listaJuegos;
    }
    
    
    public void setFachada(Fachada fachada) {
        this.fachada = fachada;
    }
    
    public Juego getJuegoSeleccionado() {
        LOGGER.info(" GET " + (juegoSeleccionado != null ? juegoSeleccionado.getPosicion() : ""));
        return juegoSeleccionado;       
    }
    
    
    public void setJuegoSeleccionado(Juego juegoSeleccionado) {
        LOGGER.info(" SET " + (juegoSeleccionado != null ? juegoSeleccionado.getPosicion() : ""));
        this.juegoSeleccionado = juegoSeleccionado;     
    }
    
}

如您所见,我将记录器放入 set/get 方法中以查看对 bean 的访问,访问顺序是逻辑的,但组件未更新

First click (show the info for item 1 and appears item 1)
2024-08-23 20:20:34 INFO  JuegosBean:99 -  SET 1
2024-08-23 20:20:34 INFO  JuegosBean:88 -  GET 1
2024-08-23 20:20:34 INFO  JuegosBean:88 -  GET 1
2024-08-23 20:20:34 INFO  JuegosBean:88 -  GET 1
2024-08-23 20:20:34 INFO  JuegosBean:88 -  GET 1
2024-08-23 20:20:34 INFO  JuegosBean:88 -  GET 1
2024-08-23 20:20:34 INFO  JuegosBean:88 -  GET 1
2024-08-23 20:20:34 INFO  JuegosBean:88 -  GET 1
2024-08-23 20:20:34 INFO  JuegosBean:88 -  GET 1
Second click (show the info for item 8 and appears item 1!!)
2024-08-23 20:21:12 INFO  JuegosBean:99 -  SET 8
2024-08-23 20:21:12 INFO  JuegosBean:88 -  GET 8
2024-08-23 20:21:12 INFO  JuegosBean:88 -  GET 8
2024-08-23 20:21:12 INFO  JuegosBean:88 -  GET 8
2024-08-23 20:21:12 INFO  JuegosBean:88 -  GET 8
2024-08-23 20:21:12 INFO  JuegosBean:88 -  GET 8
2024-08-23 20:21:12 INFO  JuegosBean:88 -  GET 8
2024-08-23 20:21:12 INFO  JuegosBean:88 -  GET 8
2024-08-23 20:21:12 INFO  JuegosBean:88 -  GET 8
2024-08-23 20:21:12 INFO  JuegosBean:88 -  GET 8
2024-08-23 20:21:12 INFO  JuegosBean:88 -  GET 8
2024-08-23 20:21:12 INFO  JuegosBean:88 -  GET 8
2024-08-23 20:21:12 INFO  JuegosBean:88 -  GET 8

我做错了什么?

使用的软件:

  • Primefaces 11
  • Java 8
  • 野蝇16

问候并感谢您的帮助

java jsf primefaces
1个回答
0
投票

这张票看起来问题已经解决了:https://github.com/primefaces/primefaces/issues/4448

您还使用 PF 11.0。您尝试过新版本吗?

© www.soinside.com 2019 - 2024. All rights reserved.