在我的数据表中有几个字段。我的目的是当你编辑这些字段中的任何一个并按下按钮时,这一行将被发送到我的backbean进行更改。
问题是当对象被发送到Backbean时,它带有原始属性(值)。
我需要在编辑字段时更新数据表并将此新值发送到我的backbean。
任何sugestions?另外,我试图避免在我的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>
我的呼叫SubAcaoMethod
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());
}
答案 0 :(得分:0)
替换
<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更新模型的新值并使用它更新表,因此当您向后发送行对象时,它将使用新的值。
使用按钮将行对象发送到back-bean方法btnAlterar,就像这样。
<p:commandButton value="#{subAcao.tipoAcao.nmDescricao}"
icon="#{subAcao.tipoAcao.nmIcone}"
action="#{WhatEverBeanHasMe.btnAlterar(modulo)}"
process="@this"
/>