在datatable中获取更新的单元格 - primefaces - java

时间:2015-09-04 01:27:59

标签: java primefaces

在我的数据表中有几个字段。我的目的是当你编辑这些字段中的任何一个并按下按钮时,这一行将被发送到我的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()); 
}

1 个答案:

答案 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"
 />