我在 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
我做错了什么?
使用的软件:
问候并感谢您的帮助
这张票看起来问题已经解决了:https://github.com/primefaces/primefaces/issues/4448
您还使用 PF 11.0。您尝试过新版本吗?