Boa Noite Galera,
To com uma dúvida na criação de componentes.
Criei um componente na seguinte estrutura: webContent / resources / componentes / toolbar.xhtml
O componente ficou assim:
<?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:cc="http://java.sun.com/jsf/composite"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:f="http://java.sun.com/jsf/core">
<cc:interface>
<cc:attribute name="salvar" method-signature="void action()" required="true"/>
<cc:attribute name="alterar" method-signature="void action()" required="true"/>
<cc:attribute name="excluir" method-signature="void action()" required="true"/>
</cc:interface>
<cc:implementation>
<p:toolbar>
<p:toolbarGroup align="right">
<p:commandButton id="commandButtonSalvar" ajax="false" value="Salvar" action="#{cc.attrs.salvar}" icon="ui-icon-disk" />
<p:commandButton id="commandButtonAlterar" ajax="false" value="Alterar" action="#{cc.attrs.alterar}" icon="ui-icon-circle-check"/>
<p:commandButton id="commandButtonExcluir" ajax="false" value="Excluir" action="#{cc.attrs.excluir}" icon="ui-icon-trash"/>
</p:toolbarGroup>
</p:toolbar>
</cc:implementation>
</html>
Criei também uma página que utiliza um template.
Quando coloco o componente na página, ele não gera nenhum erro, mas também não carrega o componente.
Também tentei adicionar a URI do componente no template, mas sem sucesso.
Tem alguma “manha” pra isso funcionar?
A URI que uso é a seguinte: xmlns:comp=“http://java.sun.com/jsf/composite/componentes”
Para chamar o componente: <comp:toolbar
salvar="#{metaTagController.salvar}"
alterar="#{metaTagController.alterar}"
excluir="#{metaTagController.excluir}"/>
Vc incluiu seu componente em uma página que tem h:head e h:body?
Sim e não.
Mas ambos os jeitos não funcionaram.
[quote=fer.ferreira6]Sim e não.
Mas ambos os jeitos não funcionaram.[/quote]Use com h:head / h:body sempre. Os componentes do primefaces precisam.
Tente colocar o componente entre <h:form>.
Caso não funcione, coloque o project stage para development. Ele detalhará melhor caso algum erro aconteça.
Era isso mesmo Hebert Coelho
Todos os componentes do primefaces precisam do head e body, creio que seja pelo css, me corrija se estiver errado.
Para consultas futuras, o código fico dessa forma:
Template:
<?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:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title></title>
<h:outputStylesheet library="css" name="estilo.css"/>
</h:head>
<h:body>
<h:panelGroup id="layout" layout="block" styleClass="layout">
<h:panelGroup id="topo" layout="block" styleClass="topo">
Topo
</h:panelGroup>
<h:panelGroup id="menu" layout="block" styleClass="menu">
<ui:insert name="menu">
<h:form>
<p:menu style="width: 200px">
<p:submenu label="Opções">
<p:menuitem value="Notícias" />
<p:menuitem value="Tags" />
<p:menuitem value="Usuários" />
</p:submenu>
<p:submenu label="Pessoal">
<p:menuitem value="Perfil" />
<p:menuitem value="Sair" />
</p:submenu>
</p:menu>
</h:form>
</ui:insert>
</h:panelGroup>
<h:panelGroup id="conteudo" layout="block" styleClass="conteudo">
<ui:insert name="conteudo"/>
</h:panelGroup>
</h:panelGroup>
</h:body>
</html>
Componente:
<?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:cc="http://java.sun.com/jsf/composite"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core">
<cc:interface>
<cc:attribute name="salvar" method-signature="void action()" required="true"/>
<cc:attribute name="alterar" method-signature="void action()" required="true"/>
<cc:attribute name="excluir" method-signature="void action()" required="true"/>
</cc:interface>
<cc:implementation>
<p:toolbar>
<p:toolbarGroup align="right">
<p:commandButton id="commandButtonSalvar" ajax="false" value="Salvar" action="#{cc.attrs.salvar}" icon="ui-icon-disk" />
<p:commandButton id="commandButtonAlterar" ajax="false" value="Alterar" action="#{cc.attrs.alterar}" icon="ui-icon-circle-check"/>
<p:commandButton id="commandButtonExcluir" ajax="false" value="Excluir" action="#{cc.attrs.excluir}" icon="ui-icon-trash"/>
</p:toolbarGroup>
</p:toolbar>
</cc:implementation>
</html>
xhtml
<ui:composition template="template/template.xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:comp="http://java.sun.com/jsf/composite/componentes">
<ui:define name="conteudo">
<h:head>
</h:head>
<h:body>
<h:form id="formTags">
<comp:toolbar salvar="#{metaTagController.salvar}"
alterar="#{metaTagController.alterar}"
excluir="#{metaTagController.excluir}" />
<h:panelGroup id="panelGroupNovo" layout="block"
styleClass="conteudo-bloco">
<h:panelGrid id="panelGridNovo" columns="3">
<h:outputLabel id="panelGridNovoLabelNomeTag"
for="panelGridInputTextNomeTag" value="Tag:" />
<p:inputText id="panelGridInputTextNomeTag"
value="#{metaTagBean.metaTag.tag}" size="40" />
</h:panelGrid>
</h:panelGroup>
<p:panel header="Tags Cadastradas" toggleable="true"
toggleOrientation="horizontal">
<h:panelGroup id="panelGroupDataTable" layout="block">
<p:dataTable id="dataTableListar" rowKey="#{metaTag.id}"
var="metaTag" selection="#{metaTagBean.metaTag}"
selectionMode="single" value="#{metaTagBean.metaTags}">
<p:ajax event="rowSelect" update=":formTags:panelGridNovo" />
<p:column headerText="Tag" sortBy="#{metaTag.tag}"
filterBy="#{metaTag.tag}">
<h:outputText value="#{metaTag.tag}" />
</p:column>
</p:dataTable>
</h:panelGroup>
</p:panel>
</h:form>
</h:body>
</ui:define>
</ui:composition>
É rapaz, isso é tenso.
Não sei c te falar se ele precisa do head/body para o css ou para outras coisas. C não me engano é para o cascade do css dele, mas não posso afirmar.
Pelo menos está resolvido! \o/