我有以下问题:
我有一个关于该数据表的PrimeFaces组件<p:datatable />
和<p:contextMenu />
的视图。此contextMenu具有actionListener
属性,用于在Managed Bean中启动方法。此方法仅更新当前状态文档,我在触发器下面执行此操作。
当我点击表格的contextMenu时,数据库中的字段(currenstate)会正确更新,但<p:datatable />
中当前文档的新值未更新
我如何解决这个问题?
这是我的DAO课程:
@Stateless
public class TramitesDaoImp implements TramitesDao {
@PersistenceContext( unitName = "tramites")
EntityManager em;
// ... more methods
@SuppressWarnings("unchecked")
@Override
public List<Tramite> findAllTramiteBy_EstadoTramite(boolean estadoTramite) {
String consultaSql = "select t from Tramite t where t.estadoTramite = :paramEstado";
Query query = em.createQuery( consultaSql );
query.setParameter( "paramEstado", estadoTramite );
return query.getResultList();
}
@Override
public int passToNextLevel(int idTramite) {
StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery( "pasarTramiteNextLevel" );
storedProcedure.registerStoredProcedureParameter( "idTramiteActual", Integer.class, ParameterMode.IN );
storedProcedure.setParameter( "idTramiteActual", idTramite );
storedProcedure.execute();
return 1;
}
这是我的托管bean:
@ManagedBean
@ViewScoped
public class TramitesBean implements Serializable{
@Inject
private TramitesService tramiteService;
//////// LISTS //////////////
private List< Tramite > listaTramiteObservados;
private List< Carrera > listaCarreras;
@PostConstruct
public void inicializar()
{
// The method listarTodoTramiteBy_EstadoTramite( boolean ), calls this method : findAllTramiteBy_EstadoTramite( boolean ) to get a List
this.listaTramiteObservados = tramiteService.listarTodoTramiteBy_EstadoTramite( true );
this.listaCarreras = tramiteService.listarTodasCarreras();
}
//..... more methods
//.... getters and setters
public void passToNextLevel()
{
int filasAfectadas = 0;
// Pasamos el tramite seleccionado al siguiente nivel
filasAfectadas = tramiteService.pasarSiguienteNivel( tramiteSeleccionado.getIdTramite() );
if( filasAfectadas != 0 )
{
mostrarMensaje( "INFORMACION", "EL TRAMITE PASÓ AL SIGUIENTE NIVEL DE FORMA CORRECTA");
}
else
{
mostrarMensaje( "ATENCION", "HUBO UN ERROR AL PASAR EL TRAMITE AL SIGUIENTE NIVEL", FacesMessage.SEVERITY_ERROR );
}
}
}
这是我的观点:
<h:form>
<p:growl id="mensajes" showDetail="true" />
<p:dataTable id="tablaTramitesObs"
value="#{tramitesBean.listaTramiteObservados}" var="obs"
widgetVar="tablaObs" paginator="true" rows="10" stickyHeader="false"
resizableColumns="true" scrollable="true" selectionMode="single"
selection="#{tramitesBean.tramiteSeleccionado}"
rowKey="#{obs.idTramite}"
emptyMessage="NO SE ENCONTRARON RESULTADOS ">
<f:facet name="filter" >
<p:selectOneMenu onchange="PF( 'tablaObs' ).filter()" style="width:190px">
<f:selectItem itemValue="#{null}" itemLabel="* TODOS *"
noSelectionOption="true" />
<f:selectItems value="#{tramitesBean.listaLugarActualTramite}"
var="lugarActual" itemLabel="#{lugarActual.descLugarActual}" />
</p:selectOneMenu>
</f:facet>
<p:column>
<h:outputText value="#{obs.lugaractualtramite.descLugarActual}" />
</p:column>
</p:dataTable>
<p:contextMenu for="tablaTramitesObs">
<p:menuitem value="Pasar al Siguiente Nivel.." actionListener="#{tramitesBean.pasarAlSiguienteNivel() }" process="@form" update="@form"
immediate="false" />
</p:contextMenu>
</h:form>
答案 0 :(得分:0)
虽然update="@form"
将会更新&#34;在客户端的表中,您可能仍需要更新服务器端的tramitesBean.listaTramiteObservados
集合。
我不确定,因为你没有包含TramitesBean
的全部内容(谢谢你保持简单),但我想你的listaTramiteObservados
已经过时了。在返回之前,您是否可以使用passToNextLevel
方法从数据库中刷新listaTramiteObservados
?然后,当客户端update
运行时,它将读取新信息。