RichFaces - Exclusão com data table em modal panel

76 views
Skip to first unread message

Denis WSRosa

unread,
Mar 23, 2010, 1:00:49 PM3/23/10
to jav...@googlegroups.com
Olá a todos!

Estou tentando construir um datatable com o recurso de exclusão, praticamente idêntico ao desse exemplo:

Tenho tido um problema ao clicar no botão "sim" do meu modalPane, ele consegue chamar o método "remove" do meu bean, porém a impressão que tenho é que não consegue rerrenderizar a página, já que assim que termina a execução do método "remove" é lancada a excessão genérica "ELException: Expression cannot be null"

Segue o meu JSP :
<f:view>
<h1>Tipos de Produtos Cadastrados</h1>
<rich:modalPanel id="deletePanel">
    Tem certeza que deseja excluir o elemento?
    <a4j:form id="form2" ajaxSingle="true">
        <table width="100%">
            <a4j:commandButton value="Sim" ajaxSingle="true"
                               action="#{productTypeList.removeProductType}"
                               oncomplete="#{rich:component('deletePanel')}.hide()"
                               reRender="tabProductTypes"/>
            <a4j:commandButton value="Cancelar"
                               onclick="#{rich:component('deletePanel')}.hide()"/>
        </table>
    </a4j:form>
</rich:modalPanel>
<h:form>
    <rich:dataTable id="tabProductTypes" rowKeyVar="row" value="#{productTypeList.productTypes}" 
                    rendered="#{not empty productTypeList.productTypes}"
                    align="center" var="dataItem">
    <rich:column sortBy="#{dataItem.name}">
        <f:facet name="header">
            <h:outputText value="Tipo de Produto"/>
        </f:facet>
        <h:outputText value="#{dataItem.name}"/>
    </rich:column>

    <rich:column>
        <f:facet name="header">
            <h:outputText value="Descricão"/>
        </f:facet>
        <h:outputText value="#{dataItem.desc}"/>
    </rich:column>
    <rich:column>
        <f:facet name="header">
            <h:outputText value="Acões"/>
        </f:facet>
        <a4j:commandLink id="delete" ajaxSingle="true" onclick="return #{rich:component('deletePanel')}.show();">
            <h:graphicImage url="/pics/remove.png"/>
            <f:setPropertyActionListener value="#{dataItem.id}" target="#{productTypeList.id}"/>
        </a4j:commandLink>
    </rich:column>
</rich:dataTable>
</h:form>
</f:view>

E este é o meu bean:

public class ProductTypeListBean {

    private List<ProductType> productTypes;
    private int id;

    /**
     * @return the productTypes
     */
    public List<ProductType> getProductTypes() throws Exception {
        System.out.println("***********************BUSCANDOOOOOOOOOOOOOOOOo");
        return new ProductTypeDAO().getAllTypes();
    }

    /**
     * @param productTypes the productTypes to set
     */
    public void setProductTypes(List<ProductType> productTypes) {
        this.productTypes = productTypes;
    }

    public void removeProductType() {
        System.out.println(" removendooooooooooooooooooooooooooooooo "+this.id);
    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

Alguma idéia do que possa estar acontecendo??? ]

Muito Obrigado!

--
Denis Wilson Souza Rosa
----------------------------------------------------
Systems Architect
mobile: +55 11 8248 8653
email: denis...@gmail.com / denis...@hotmail.com

Denis WSRosa

unread,
Mar 23, 2010, 3:48:36 PM3/23/10
to jav...@googlegroups.com
Pergunta: colocar o "return" no onclick está correto? pq removendo ele do commandlink já vai direto para a página  de exception lançada.
Outra dúvida, quando chamo a action no método commandButton  o jsf recarrega a mesma página? o problema pode ser neste ponto?Coisas como o bean ser request ou session interferem nesse caso?

Obrigado!

2010/3/23 Denis WSRosa <denis...@gmail.com>

Weverton Peron

unread,
Mar 23, 2010, 6:23:33 PM3/23/10
to jav...@googlegroups.com
Olá,

Em primeiro lugar setar o prependId do h:form  para false, pois assim ele utilizará o id real que vc está informando.
Depois crie uma a4j:jsFunction e dê um reRender no componente que vc quer.
Agora no oncomplete do commandButton, chame esta função que vc criou com o jsFunction.

O modalPanel é um componente enjoado de se utilizar, mas creio que isso resolverá o teu problema.

Um abraço

Weverton Peron
Reply all
Reply to author
Forward
0 new messages