Submeter um form com um command button a partir de outro form
7 respostas
J
juliocbq
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.
<ui:fragmentxmlns: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:outputStylesheetlibrary="css"name="main.css"/><h:outputScriptlibrary="js"name="jslib.js"/><f:viewcontentType="text/html"><h:formid="frCadVis"><h:panelGridid="cadVisitantes"columns="2"cellpadding="5"><h:outputLabelvalue="Código:"/><p:inputTextid="itID"style="width: 30px;"tabindex="1"disabled="true"value="#{visitanteData.visitante.id}"/><h:outputLabelvalue="Nome:"/><p:inputTextid="itNome"immediate="true"tabindex="2"value="#{visitanteData.visitante.nome}"maxlength="100"style="width: 500px;"/><h:outputLabelvalue="RG:"/><p:inputTextid="itRG"tabindex="3"immediate="true"value="#{visitanteData.visitante.rg}"maxlength="15"style="width: 100px;"/><h:outputLabelvalue="CPF:"/><p:inputMaskid="imCPF"immediate="true"tabindex="4"value="#{visitanteData.visitante.cpf}"maxlength="11"mask="[telefone removido]"/><h:outputLabelvalue="Telefone:"/><p:inputMaskid="imTelefone"immediate="true"tabindex="5"value="#{visitanteData.visitante.telefone}"maxlength="10"mask="[telefone removido]"/><h:outputLabelvalue="Data Expiração:"/><p:calendarid="clExpiration"immediate="true"tabindex="6"pattern="dd/MM/yyyy"showOn="button"value="#{visitanteData.visitante.dataexpiracao}"locale="pt_BR"/><h:outputLabelvalue="Placa do Carro:"/><p:inputTextid="itPlaca"immediate="true"tabindex="7"maxlength="8"value="#{visitanteData.visitante.placacarro}"style="width: 80px;"/><h:outputLabelvalue="Número do Cartão:"/><p:inputMaskid="imCard"immediate="true"tabindex="8"value="#{visitanteData.visitante.codigocartaoexibicao}"maxlength="10"mask="9999999"/><h:outputLabelvalue=""/><s:selectentitystyle="width:200px;"next="#{visitanteData.next}"prev="#{visitanteData.prev}"/></h:panelGrid><h:inputHiddenid="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"><htmlxmlns="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:outputStylesheetlibrary="css"name="main.css"/><h:outputScriptlibrary="js"name="jslib.js"/></h:head><h:body><f:viewcontentType="text/html"><!-- Menu --><ui:includesrc="templates/fragments/menufr.xhtml"/><s:toolbarcancel="#{visitanteData.cancel()}"new="#{visitanteData.nnew()}"save="#{visitanteData.save()}"exit="#{visitanteData.exit()}"/><!-- Tab View --><p:tabViewid="tbvPrincipal"styleClass="tabview_principal"dynamic="true"activeIndex="#{visitanteData.tabIndex}"><p:tabid="tbPesquisa"title="Pesquisa"><!-- Tabela --></p:tab><p:tabid="tbCad"title="Cadastro de Visitantes"><ui:includesrc="templates/fragments/cadvisfr.xhtml"/></p:tab><p:tabid="tbObs"title="Observações"><h:panelGridcolumns="2"cellpadding="5"><h:formid="frObs"><h:outputLabelvalue="Observações:"/><h:outputLabelvalue=""/><p:inputTextareaid="taObs"value="#{visitanteData.visitante.obs}"maxHeight="250"style="width: 400px; height: 250px;"/><h:outputLabelvalue=""/></h:form></h:panelGrid></p:tab><p:tabid="tbPerfis"title="Perfil de Acesso"><s:perfisselected="#{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>
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
alissonvla
a sua estrutura de diretorios está como ele disse no artigo?
J
juliocbq
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.