获取数据表中更新的单元格 - primefaces - java
get updated cell in datatable - primefaces - java
在我的数据表中有几个字段。我的意图是,当您编辑这些字段中的任何一个并按下按钮时,该行将发送到我的 backbean 以进行更改。
问题是当对象被发送到 Backbean 时,它带有原始属性(值)。
我需要在编辑字段时更新数据表,并将这个新值发送到我的 backbean。
有什么建议吗?另外,我试图避免在我的 backbean 中使用 primefaces...到目前为止我已经做到了..
我的数据表
<h:form id="formBean">
<p:dataTable id="dataTableBean"
var="modulo"
value="#{moduloBean.listModulo}"
paginator="true"
rows="15"
resizableColumns="true">
<p:column headerText="Id"><h:outputText value="#{modulo.id}"/></p:column>
<p:column id="columnNmDescricao"
headerText="Descrição">
<p:inputText id="inputNmDescricao" value="#{modulo.nmDescricao}">
<p:ajax event="change"
update=":formTabFuncionalidade:tabViewTabFuncionalidade:tabViewAcaoFuncionalidade:formBean:dataTableBean"
process="@this :formTabFuncionalidade:tabViewTabFuncionalidade:tabViewAcaoFuncionalidade:formBean:dataTableBean:0:inputNmDescricao"/>
</p:inputText>
</p:column>
<p:column headerText="Ativo"><h:outputText value="#{modulo.ativo.nmAtivo}"/></p:column>
<!-- Coluna para Ações. Trocar apenas os 2 últimos parâmetros do callSubAcaoMethod -->
<p:column id="columnAcoes"
headerText="Ações">
<c:forEach items="#{funcionalidade.listAcao}"
var="subAcao">
<c:if test="#{!subAcao.tipoAcao.flPrincipal}">
<p:commandButton id="btnAcoes"
value="#{subAcao.tipoAcao.nmDescricao}"
icon="#{subAcao.tipoAcao.nmIcone}"
action="#{segurancaBean.callSubAcaoMethod(subAcao, moduloBean.class, modulo)}"
process="@this"/>
</c:if>
</c:forEach>
</p:column>
</p:dataTable>
</h:form>
我调用的SubAcao方法
public void callSubAcaoMethod(Acao acao, Class bean, Object objeto){
try {
/* Método de instanciar um objeto dinamicamente em uso de CDI */
Object objBean = CDI.current().select(bean).get();
/* Estou chamando o método do Bean, dando como parâmetro suas ações e a classe que será alterada */
Method method = bean.getMethod(acao.getTipoAcao().getNmBean(), objeto.getClass());
method.invoke(objBean, objeto);
} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
Logger.getLogger(SegurancaBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
我要调用的方法
public void btnAlterar(Modulo entity){
System.out.println(entity);
System.out.println(entity.getId());
System.out.println(entity.getNmDescricao());
System.out.println(entity.getAtivo().getNmAtivo());
}
替换
<p:inputText id="modelInput" value="#{modulo.nmDescricao}" style="width:96%"/>
和
<p:inputText id="modelInput" value="#{modulo.nmDescricao}" style="width:96%">
<p:ajax event="change" proces="@this :formID:dataTable:modelInput" update=":formID:dataTable"></p:ajax></p:inputText>
您需要使用 ajax 更新模型的新值并使用它更新 table,因此当您将行对象发送到后台时,它是新的值。
使用按钮,您可以像这样将行对象发送到后台 bean 方法 btnAlterar。
<p:commandButton value="#{subAcao.tipoAcao.nmDescricao}"
icon="#{subAcao.tipoAcao.nmIcone}"
action="#{WhatEverBeanHasMe.btnAlterar(modulo)}"
process="@this"
/>
在我的数据表中有几个字段。我的意图是,当您编辑这些字段中的任何一个并按下按钮时,该行将发送到我的 backbean 以进行更改。
问题是当对象被发送到 Backbean 时,它带有原始属性(值)。
我需要在编辑字段时更新数据表,并将这个新值发送到我的 backbean。
有什么建议吗?另外,我试图避免在我的 backbean 中使用 primefaces...到目前为止我已经做到了..
我的数据表
<h:form id="formBean">
<p:dataTable id="dataTableBean"
var="modulo"
value="#{moduloBean.listModulo}"
paginator="true"
rows="15"
resizableColumns="true">
<p:column headerText="Id"><h:outputText value="#{modulo.id}"/></p:column>
<p:column id="columnNmDescricao"
headerText="Descrição">
<p:inputText id="inputNmDescricao" value="#{modulo.nmDescricao}">
<p:ajax event="change"
update=":formTabFuncionalidade:tabViewTabFuncionalidade:tabViewAcaoFuncionalidade:formBean:dataTableBean"
process="@this :formTabFuncionalidade:tabViewTabFuncionalidade:tabViewAcaoFuncionalidade:formBean:dataTableBean:0:inputNmDescricao"/>
</p:inputText>
</p:column>
<p:column headerText="Ativo"><h:outputText value="#{modulo.ativo.nmAtivo}"/></p:column>
<!-- Coluna para Ações. Trocar apenas os 2 últimos parâmetros do callSubAcaoMethod -->
<p:column id="columnAcoes"
headerText="Ações">
<c:forEach items="#{funcionalidade.listAcao}"
var="subAcao">
<c:if test="#{!subAcao.tipoAcao.flPrincipal}">
<p:commandButton id="btnAcoes"
value="#{subAcao.tipoAcao.nmDescricao}"
icon="#{subAcao.tipoAcao.nmIcone}"
action="#{segurancaBean.callSubAcaoMethod(subAcao, moduloBean.class, modulo)}"
process="@this"/>
</c:if>
</c:forEach>
</p:column>
</p:dataTable>
</h:form>
我调用的SubAcao方法
public void callSubAcaoMethod(Acao acao, Class bean, Object objeto){
try {
/* Método de instanciar um objeto dinamicamente em uso de CDI */
Object objBean = CDI.current().select(bean).get();
/* Estou chamando o método do Bean, dando como parâmetro suas ações e a classe que será alterada */
Method method = bean.getMethod(acao.getTipoAcao().getNmBean(), objeto.getClass());
method.invoke(objBean, objeto);
} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
Logger.getLogger(SegurancaBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
我要调用的方法
public void btnAlterar(Modulo entity){
System.out.println(entity);
System.out.println(entity.getId());
System.out.println(entity.getNmDescricao());
System.out.println(entity.getAtivo().getNmAtivo());
}
替换
<p:inputText id="modelInput" value="#{modulo.nmDescricao}" style="width:96%"/>
和
<p:inputText id="modelInput" value="#{modulo.nmDescricao}" style="width:96%">
<p:ajax event="change" proces="@this :formID:dataTable:modelInput" update=":formID:dataTable"></p:ajax></p:inputText>
您需要使用 ajax 更新模型的新值并使用它更新 table,因此当您将行对象发送到后台时,它是新的值。
使用按钮,您可以像这样将行对象发送到后台 bean 方法 btnAlterar。
<p:commandButton value="#{subAcao.tipoAcao.nmDescricao}"
icon="#{subAcao.tipoAcao.nmIcone}"
action="#{WhatEverBeanHasMe.btnAlterar(modulo)}"
process="@this"
/>