Submeter um form com um command button a partir de outro form

7 respostas
J

Boa tarde,

Aconteceu uma situação engraçada comigo. Estou refatorando um projeto para usar componentes compostos jsf2. O primefaces também está incluso como framework de ajax.

Criei um componente de menu onde existem os botões adicionar, excluir e atualizar. Dessa maneira posso reaproveitar as funcionalidades desse menu em todos os meus cadastros, porém me deparei com um problema.

Não consigo submeter os formulários dos cadastros utilizando os commandbuttons do componente menu, nem mesmo através do javascript:

document.getElementById('frCadVis').submit();

onde frCadVis é o form alvo.
No final os dados cadastrados na parte cliente não são atualizados para o lado server.

O que estou fazendo de errado?

7 Respostas

A

coloca o fonte ai.

e ve se seu form ta dentro de <f:view contentType=“text/html”>

t+

J

menu:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:cc="http://java.sun.com/jsf/composite">
    <h:outputScript library="js" name="jslib.js"/>

    <!-- INTERFACE -->
    <cc:interface>
        <cc:attribute name="new" required="false" method-signature="void action()"/>
        <cc:attribute name="save" required="false" method-signature="void action()"/>
        <cc:attribute name="del" required="false" method-signature="void action()"/>
        <cc:attribute name="cancel" required="false" method-signature="void action()"/>
        <cc:attribute name="exit" required="false" method-signature="void action()"/>
    </cc:interface>

    <!-- IMPLEMENTATION -->
    <cc:implementation>
        <f:view contentType="text/html">
            <h:form id="frToolbar">
                <p:toolbar id="tlbComand" styleClass="menu_bar" >
                    <p:toolbarGroup align="left">
                        <p:commandButton action="#{cc.attrs.new}" title="Novo Registro" image="ui-icon-document" ajax="false"/>
                        <p:commandButton onclick="test();" action="#{cc.attrs.save}" title="Salvar Registro" image="ui-icon-disk" ajax="false"/>
                        <p:commandButton action="#{cc.attrs.del}" title="Excluir Registro" image="ui-icon-close"/>
                        <p:commandButton action="#{cc.attrs.cancel}" title="Cancelar Registro" image="ui-icon-refresh" ajax="false"/>
                        <p:commandButton action="#{cc.attrs.exit}" title="Sair" image="ui-icon-home" ajax="false"/>
                    </p:toolbarGroup>
                </p:toolbar>
            </h:form>
        </f:view>
    </cc:implementation>
</html>

cadastro:

<ui:fragment
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.prime.com.tr/ui"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:s="http://java.sun.com/jsf/composite/components"
    xmlns:f="http://java.sun.com/jsf/core">
    <h:outputStylesheet library="css" name="main.css"/> 
    <h:outputScript library="js" name="jslib.js"/>

    <f:view contentType="text/html">
        <h:form id="frCadVis">
            <h:panelGrid id="cadVisitantes" columns="2" cellpadding="5">
                <h:outputLabel value="Código:"/>
                <p:inputText id="itID" style="width: 30px;" tabindex="1" disabled="true" value="#{visitanteData.visitante.id}"/>

                <h:outputLabel value="Nome:"/>
                <p:inputText id="itNome" immediate="true" tabindex="2"  value="#{visitanteData.visitante.nome}" maxlength="100" style="width: 500px;"/>
                    

                <h:outputLabel value="RG:"/>
                <p:inputText id="itRG" tabindex="3" immediate="true"  value="#{visitanteData.visitante.rg}" maxlength="15" style="width: 100px;"/>
                    

                <h:outputLabel value="CPF:"/>
                <p:inputMask id="imCPF" immediate="true" tabindex="4"  value="#{visitanteData.visitante.cpf}" maxlength="11" mask="[telefone removido]"/>



                <h:outputLabel value="Telefone:"/>
                <p:inputMask id="imTelefone" immediate="true" tabindex="5"  value="#{visitanteData.visitante.telefone}" maxlength="10" mask="[telefone removido]"/>
       

                <h:outputLabel value="Data Expiração:"/>
                <p:calendar id="clExpiration" immediate="true" tabindex="6"  pattern="dd/MM/yyyy" showOn="button" value="#{visitanteData.visitante.dataexpiracao}" locale="pt_BR"/>


                <h:outputLabel value="Placa do Carro:"/>
                <p:inputText id="itPlaca" immediate="true" tabindex="7" maxlength="8"  value="#{visitanteData.visitante.placacarro}" style="width: 80px;"/>

                
                <h:outputLabel value="Número do Cartão:"/>
                <p:inputMask id="imCard" immediate="true" tabindex="8" value="#{visitanteData.visitante.codigocartaoexibicao}" maxlength="10" mask="9999999"/>


                <h:outputLabel value=""/>
                <s:selectentity style="width:200px;" next="#{visitanteData.next}" prev="#{visitanteData.prev}"/>
            </h:panelGrid>
            <h:inputHidden id="cmdCadVis" value="xyz"/>
        </h:form>
    </f:view>
</ui:fragment>

A xhtml que inclui os componentes:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:s="http://java.sun.com/jsf/composite/components"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>Access Control WebServer</title>
        <h:outputStylesheet library="css" name="main.css"/> 
        <h:outputScript library="js" name="jslib.js"/>
    </h:head>
    <h:body>
        <f:view contentType="text/html">
            
            <!--           Menu         -->
            <ui:include src="templates/fragments/menufr.xhtml"/>

            <s:toolbar cancel="#{visitanteData.cancel()}" new="#{visitanteData.nnew()}" save="#{visitanteData.save()}" exit="#{visitanteData.exit()}"/>

            <!--           Tab View         -->
            <p:tabView id="tbvPrincipal" styleClass="tabview_principal" dynamic="true" activeIndex="#{visitanteData.tabIndex}">
                <p:tab id="tbPesquisa" title="Pesquisa">
                    <!--           Tabela         -->
                </p:tab> 
                <p:tab id="tbCad" title="Cadastro de Visitantes">
                    <ui:include src="templates/fragments/cadvisfr.xhtml"/>
                </p:tab>
                <p:tab id="tbObs" title="Observações">       
                    <h:panelGrid columns="2" cellpadding="5">
                        <h:form id="frObs">
                            <h:outputLabel value="Observações:"/>
                            <h:outputLabel value=""/>

                            <p:inputTextarea  id="taObs" value="#{visitanteData.visitante.obs}" maxHeight="250" style="width: 400px; height: 250px;"/>

                            <h:outputLabel value=""/>
                        </h:form>
                    </h:panelGrid>
                </p:tab>
                <p:tab id="tbPerfis" title="Perfil de Acesso">
                    <s:perfis selected="#{visitanteData.selectedPerfil}" del="#{visitanteData.delPerfil()}" add="#{visitanteData.addPerfil()}" perfil="#{visitanteData.perfis}" combo="#{perfisCombo.combo}" value="#{visitanteData.perfilId}"/>
                </p:tab>
            </p:tabView>
            
        </f:view>
    </h:body>
</html>
A

http://cassiosousa.wordpress.com/tag/primefaces-2/

ve ai…

J

alissonvla:
http://cassiosousa.wordpress.com/tag/primefaces-2/

ve ai…

desculpe, não entendi o contexto do artigo. Nele mostra o componente salvando num mbean. O meu faz isso também. O problema é que os dados do outro formulário não chegam no servidor, bem provavelmente porque aquele formulário não foi submetido. Por exemplo, se eu colocar um commandbutton no mesmo e usar salva() como action, tudo ocorre bem.

A

a sua estrutura de diretorios está como ele disse no artigo?

J

opa, aqui está. Os componentes tem que estar dentro de resources. Os outros estão funcionando, e ele também. O problema é eu conseguir fazer o outro form postar por um javascript.


J

Segue os forms


Criado 18 de agosto de 2011
Ultima resposta 18 de ago. de 2011
Respostas 7
Participantes 2