Problemas com form dentro de p:dialog - Primefaces 3.1 [Resolvido]

Olá Pessoal,
Estou com problemas na utilização de um formulario dentro de um <p:dialog>
Quando adiciono um “cabeçalho” no dialog, o formulario fica alinhado com o tamanho da palavra escrita no header e não no começo do dialog.
Alguem sabe como corrigir isso ?

segue um desenho besta de como ta ficando e como deveria ficar.

ta ficando :
|------------------------------------------------------------------|

Nova Tag
<espaço> nome da tag:_______________
<espaço> descricao: _______________
------------------------------------------------------------------

Deveria ficar:
|------------------------------------------------------------------|

Nova Tag
Nome da tag:_______________
Descricao: _______________
------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 
	<style>
		.link{
			cursor: pointer;
		}
		.header{
			text-align: left;
		}
	</style>
	
<!-- <link rel="stylesheet" href="/html/css/style.css"/> -->	
	
</h:head>
<h:form>
<p:dialog id="dialogtag1" header="Nova Tag" widgetVar="tag" showEffect="clip" hideEffect="clip" modal="true" resizable="false">  
		<h:panelGrid columns="2" cellpadding="3">
        	<h:outputLabel for="nometag" value="Nome da tag:" />  
            <p:inputText id="nometag"  required="true" style="width:300px"/>  
			 
            <h:outputLabel for="descricaotag" value="Descrição:" />  
            <p:inputText id="descricaotag"  required="true" style="width:300px"/>  
			
            <h:outputLabel for="tagPublico" value="Tag Padrão?:" />  
            <h:selectBooleanCheckbox id="tagPublico"/>  
   		
			<h:outputLabel for="conteudotag" value="Conteúdo:" />  
            <p:inputTextarea style="width:300px;height:100px;" effectDuration="400"
            	 id="conteudotag"  required="true"/>
   		
   			<f:facet name="footer">
				<p:commandButton value="Salvar" />
				<p:commandButton type="reset" value="Limpar" />
			</f:facet>  	    
        </h:panelGrid>
		      
</p:dialog>
</h:form>
</html>

cara,
isso provavelmente é problema de css.
vo deixar um dica para vc nao ficar quebrando a cabeça, qdo vc for usar dialog com form, vc coloca um form dentro do dialog, e seu dialog ão pode ficar dentro do seu form principal, pq senão nao vai funcionar.

t+

Boa Tarde Alisson,

Vc se refere ao css do proprio componente p:dialog ?
eu to achando que esse componente não permite deixar o inicio do conteudo junto com inicio do dialog…

Segue o codigo corrigido conforme dica…

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

</h:head>

<ui:include src="menu.xhtml" />

<h:form style="text-align: center" id="form">
	<p:graphicImage value="/html/images/novo user.jpg"
		style="cursor: pointer" onclick="tag.show()" />
	<h:form>
		<!-- <p:growl id="msgs" showDetail="true" /> -->
		<p:dataTable var="car" value="#{tableBean.carsSmall}"
			widgetVar="carsTable"
			emptyMessage="No cars found with given criteria">

			<f:facet name="header">
				<p:outputPanel>
					<h:outputText value="Procurar em todos os campos:" />
					<p:inputText id="globalFilter" onkeyup="carsTable.filter()"
						style="width:150px" />
				</p:outputPanel>
			</f:facet>

			<p:column filterBy="#{car.model}" headerText="Nome"
				filterMatchMode="contains">
				<h:outputText value="#{car.model}" />
			</p:column>

			<p:column filterBy="#{car.year}" headerText="Descrição">
				<h:outputText value="#{car.year}" />
			</p:column>

			<p:column filterBy="#{car.color}" headerText="Tag Publica"
				filterMatchMode="endsWith">
				<h:outputText value="#{car.color}" />
			</p:column>

			<p:column style="width:100px" headerText="Opçoes">
				<p:commandButton update=":form:display"
					oncomplete="carDialog.show()" image="ui-icon ui-icon-pencil"
					title="Edit" onclick="tag.show()">
					<f:setPropertyActionListener value="#{car}"
						target="#{tableBean.selectedCar}" />
					<f:setPropertyActionListener value="#{true}"
						target="#{tableBean.editMode}" />
				</p:commandButton>
				<p:commandButton update=":form:display"
					oncomplete="confirmation.show()" image="ui-icon ui-icon-close"
					title="Delete">
					<f:setPropertyActionListener value="#{car}"
						target="#{tableBean.selectedCar}" />
				</p:commandButton>
			</p:column>
		</p:dataTable>
	</h:form>
</h:form>

<p:confirmDialog message="Deseja deletar o registro?"
	showEffect="explode" hideEffect="explode" header="DSC" severity="alert"
	widgetVar="confirmation">

	<p:commandButton value="Sim" update="cars"
		actionListener="#{tableBean.delete}" oncomplete="confirmation.hide()" />
	<p:commandButton value="Não" onclick="confirmation.hide()"
		type="button" />
</p:confirmDialog>

<p:dialog id="dialogtag1" header="Nova Tag" widgetVar="tag" showEffect="clip"
	hideEffect="clip" modal="true" resizable="false">

	<!-- header="Nova Tag"  -->
	<h:panelGrid columns="2" cellpadding="3">
		<h:outputLabel for="nometag" value="Nome da tag:" />
		<p:inputText id="nometag" required="true" style="width:300px" />

		<h:outputLabel for="descricaotag" value="Descrição:" />
		<p:inputText id="descricaotag" required="true" style="width:300px" />

		<h:outputLabel for="tagPublico" value="Tag Padrão?:" />
		<h:selectBooleanCheckbox id="tagPublico" />

		<h:outputLabel for="conteudotag" value="Conteúdo:" />
		<p:inputTextarea style="width:300px;height:100px;"
			effectDuration="400" id="conteudotag" required="true" />

		<f:facet name="footer">
			<p:commandButton value="Salvar" />
			<p:commandButton type="reset" value="Limpar" />
		</f:facet>
	</h:panelGrid>
</p:dialog>
</html>

entao,

deve ser algum css que vc fez e ele ta se aplicando ao seu dialog, vc pode usar firebug do firefox para ver o que esta acontendo, provavelmente, vc vai ter que fazer algum css para resolver esse problema.

PS: observe que seu codigo ta com 2 h:form.

t+

Será que se eu criar um styleClass para o p:dialog e configurar e deixar “text-align: left;”, funciona ?

isso, vc vai usar styleClass.
Agora vc vai ter que testar, pq eu nao sei se vai funcionar com text-align, css não é meu forte, conheco o necessario… :smiley:

t+

Olá, tive o mesmo problema com o meu projeto. O problema neste caso é a propriedade Header do <p:dialog>, quanto mais caracteres escritos no header mais ele alinha a direita,
no meu caso, como não encontrei nenhuma outra solução até o momento, optei por deixar o header sem nada escrito e funcionou.

Espero ter ajudado, e caso alguém encontre alguma solução melhor posta ai.

Att

Bom dia pessoal,

Depois de muito trabalho, descobri qual era o real problema do alinhamento.

Primeiramente, lembro que eu estou utilizando o primefaces 3.0 e nao o 2.1

Dentro do Jar do primefaces referente a propriedade dialog, ha um CSS de configuração. (primefaces-3.0.M3\META-INF\resources\primefaces\dialog\dialog.css)

Altere o codigo de :

.ui-dialog {
	position: fixed;
	padding: 0px;
	overflow: hidden;
	visibility: hidden;
}

.ui-dialog .ui-dialog-titlebar {
	padding: .4em 1em;
	padding-right: 0px;
	height: 14px;
	position: relative;
}

Para:

.ui-dialog {
	position: absolute;
	padding: .2em;
	width: 300px;
	overflow: hidden;
}

.ui-dialog .ui-dialog-titlebar {
	padding: .4em 1em;
	position: relative;
}

Para mim, resolveu…

Olá, realmente o ajuste no CSS (dialog.css) do Primefaces resolve o problema, aqui também funcionou.
Obrigado pela dica.

Salve Pessoal,

O primefaces disponibilizou uma nova versão do css do p:dialog re resolve totalmente esse problema.
No ultimo CSS que eu passei para vcs, ainda ficava meio zuado o local onde fechava o dialog(ficava muito na esquerda).

Altere todo arquivo dialog.css do diretorio que eu ja tinha mencionado para o codigo abaixo:

.ui-dialog { position: fixed; padding: 0; overflow: hidden;}
.ui-dialog .ui-dialog-titlebar { padding: .4em .4em .4em 1em; position: relative; border:0px; }
.ui-dialog .ui-dialog-title { float: left; margin: .3em 16px .1em 0; } 
.ui-dialog .ui-dialog-content {position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
.ui-dialog .ui-dialog-titlebar-close, .ui-dialog .ui-dialog-titlebar-minimize,.ui-dialog .ui-dialog-titlebar-maximize { position: relative;  float: right; margin: 0px; top:0px; padding: 1px; }
.ui-dialog .ui-dialog-titlebar-close span, .ui-dialog .ui-dialog-titlebar-minimize span, .ui-dialog .ui-dialog-titlebar-maximize span { display: block; margin: 1px; }
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus, .ui-dialog .ui-dialog-titlebar-minimize:hover, .ui-dialog .ui-dialog-titlebar-minimize:focus, .ui-dialog .ui-dialog-titlebar-maximize:hover, .ui-dialog .ui-dialog-titlebar-maximize:focus   { padding: 0; }
.ui-dialog-footer {padding: .4em 1em; border-width: 1px 0 0 0;text-align:left;}
.ui-dialog-docking-zone {position: fixed;bottom: 0;left: 0;}
.ui-dialog-minimizing {border: 2px dotted gray;}
.ui-confirm-dialog-severity {float: left; margin: 3px 7px 20px 0;}