Selectone x Dialog JSF JAVA conflito, perdendo referencia ao alterar

8 respostas
N

Galera, tenho um Selectone em um Dialog, uso esse Dialog para incluir, consultar e alterar.

consigo incluir, mas não consigo alterar nem consultar, pois não atualiza o selectone, outros campos como p:calendar, p:inputTextarea estão trazendo os dados, deve ser algum conflito em relação ao Selectone, pois ao debugar, percebi que o valor do atributo está correto até certo momento, no último set get que o sistema faz ele zera o valor desse atributo que deveria aparecer no selectone, alguém sabe o porquê desse problema?

Grato.

Thiago.

8 Respostas

N

Só pra agilizar, vou postar meu código:

Aqui é onde chamo para alterar
<p:commandButton id="btnAlteraTarefa" icon="alterartable"
													styleClass="botaoTable"
													title="#{msg.LEGENDA_ALTERAR} #{msg.CAMPO_TAREFA}"
													action="#{atendimentoBean.alteraTarefa(tar)}"
													oncomplete="rcAtualizaDadosTarefa()"
													disabled="#{not atendimentoBean.habilitado}"
													style="background-color: transparent;border:0px;"/>
Através de um remotecomand chamo o Dialog
<p:remoteCommand id="commandAtualizaDadosTarefa"
				oncomplete="panelNovaTarefa.show();" name="rcAtualizaDadosTarefa"
								 update="dadosTarefa" />
Dialog
<p:dialog id="panelNovaTarefa" widgetVar="panelNovaTarefa"
				width="720" modal="true" header="#{msg.LEGENDA_MANUTENCAOTAREFA}" >

				<h:panelGroup id="dadosTarefa">
					<h:panelGrid id="panelTarefa1" columns="10">


						<h:outputText id="lblTarPrioridade"
							value="#{msg.CAMPO_PRIORIDADE}:" />

						<p:selectOneMenu id="selectOneTarOrdem" style="width: 130px;"
							value="#{atendimentoBean.codigoOrdemTarefa}" 
								disabled="#{not atendimentoBean.habilitaTarefa}" effect="fade" >
							<f:selectItem itemLabel="Selecione" itemValue="0" />
							<f:selectItem itemLabel="1" itemValue="1" />
							<f:selectItem itemLabel="2" itemValue="2" />
							<f:selectItem itemLabel="3" itemValue="3" />
							<f:selectItem itemLabel="4" itemValue="4" />
							<f:selectItem itemLabel="5" itemValue="5" />
							<f:selectItem itemLabel="6" itemValue="6" />
							<f:selectItem itemLabel="7" itemValue="7" />
							<f:selectItem itemLabel="8" itemValue="8" />
							<f:selectItem itemLabel="9" itemValue="9" />
							<f:selectItem itemLabel="10" itemValue="10" />
						</p:selectOneMenu>

						<h:outputText id="lbltarStatus" value="#{msg.CAMPO_STATUS}:" />

						<p:selectOneMenu id="selectOneStatus" style="width: 130px;"
							value="#{atendimentoBean.tarefa.status.codigo}"
							disabled="#{not atendimentoBean.habilitaTarefa}" effect="fade">
							<f:selectItem id="selectTarStatus" itemLabel="" itemValue="0" />
							<f:selectItems id="selectStatuses"
								value="#{atendimentoBean.statuses}" var="tarSta"
								itemValue="#{tarSta.codigo}" itemLabel="#{tarSta.descricao}" />

						</p:selectOneMenu>

						<h:outputText id="lbltarDataHomologado"
							value="#{msg.CAMPO_DATACONCLUIDO}:" />

						<p:calendar id="tarDataHomologado" mask="99/99/9999"
							value="#{atendimentoBean.dataConcluido}" pattern="dd/MM/yyyy"
							locale="pt" mode="popup" navigator="true" showButtonPanel="true"
							disabled="#{not atendimentoBean.habilitaTarefa}"
							onblur="validaDat(this,this.value,'#{msg.MSG_CAMPODATAINVALIDO}')"
							showOn="button" size="13" />

						<!-- Salva Tarefa -->
						<h:commandButton id="confirmatarefa"
							image="/resources/image/confirm.png"
							title="#{msg.LEGENDA_CONFIRMAR} #{msg.CAMPO_TAREFA}"
							disabled="#{not atendimentoBean.habilitaTarefa}"
							action="#{atendimentoBean.gravaTarefa}" />


						<!-- Cancela Tarefa -->
						<h:commandButton id="cancelartarefa"
							image="/resources/image/cancelarRegistro.png"
							disabled="#{not atendimentoBean.habilitaTarefa}"
							action="#{atendimentoBean.cancelObjectTar}"
							title="#{msg.LEGENDA_CANCELAR} #{msg.CAMPO_TAREFA}" />


					</h:panelGrid>

					<!-- Descrição Tarefa -->

					<h:panelGrid id="panelTarefaC3" columns="8">

						<h:outputText id="lbltarDescricao" value="#{msg.CAMPO_DESCRICAO}:" />
						<p:inputTextarea rows="10" cols="115" autoResize="false"
							value="#{atendimentoBean.tarefa.descricao}"
							id="edtTarefaDescricao"
							disabled="#{not atendimentoBean.habilitaTarefa}"
							onkeypress='return verificar_caracter(event)' autocomplete="off" />

					</h:panelGrid>
				</h:panelGroup>
			</p:dialog>
N

Algum colega ai poderia me ajudar como alterar os dados do selectonemenu em um dialog? como por exemplo:

<p:selectOneMenu id="selectOneTarOrdem" style="width: 130px;" value="#{atendimentoBean.codigoOrdemTarefa}" disabled="#{not atendimentoBean.habilitaTarefa}" effect="fade" > <f:selectItem itemLabel="Selecione" itemValue="0" /> <f:selectItem itemLabel="1" itemValue="1" /> <f:selectItem itemLabel="2" itemValue="2" /> <f:selectItem itemLabel="3" itemValue="3" /> <f:selectItem itemLabel="4" itemValue="4" /> <f:selectItem itemLabel="5" itemValue="5" /> <f:selectItem itemLabel="6" itemValue="6" /> <f:selectItem itemLabel="7" itemValue="7" /> <f:selectItem itemLabel="8" itemValue="8" /> <f:selectItem itemLabel="9" itemValue="9" /> <f:selectItem itemLabel="10" itemValue="10" /> </p:selectOneMenu>

G

Olá amigo,

Em primeiro lugar, depois posta o seu bean tambem aqui para ficar mais claro. Mas em princípio, eu acredito que você quer trazer uma List para dentro do selectOneMenu e quando o usuario selecionar um item , esse “um” irá setar seu atributo no Bean. Não é isso ?

Bem vamos lá,

Tenho um exemplo aqui que pode te ajudar:

<p:selectOneMenu  value="#{seuBean.atributoRecebedor}"> 
			<f:selectItem itemLabel="Selecione" itemValue="" /> 
			<f:selectItems value="#{seuBean.Lista}" var="lista" itemLabel="#{lista}" itemValue="#{lista}" />
		 </p:selectOneMenu>

O itemLabel é o que aparece na combo , já o itemValue é o que vai setar o atributoRecebedor setado no campo “value”.

O que eu senti falta no seu dialog foi o formulario "<h:form> em volta do seu código.

Espero ter ajudado,

Um abraço,

Gustavo

N

meu BEAN onde altero

// Altera tarefa
public void alteraTarefa(Tarefa tar) {

		tarefa = new Tarefa();
		setHabilitaTarefa(true);

		try {
			statuses = new DAO<Status>(Status.class,
					JSFUtil.getPersistenceSession(), null).list();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		tarefa = tar;
		setCodigoTarefaStatus(this.tarefa.getStatus().getCodigo());
		getModelo().setPorcentual(calcPorcentagem());
		codigoStatusTarefa = tar.getStatus().getCodigo();
		codigoOrdemTarefa = tar.getOrdem();

	}
G

Seu caso é mas simples que eu pensava:

<p:selectOneMenu id="selectOneTarOrdem" style="width: 130px;" value="#{atendimentoBean.codigoOrdemTarefa}" disabled="#{not atendimentoBean.habilitaTarefa}" effect="fade" > <f:selectItem itemLabel="Selecione" itemValue="0" /> <f:selectItem itemLabel="1" itemValue="1" /> <f:selectItem itemLabel="2" itemValue="2" /> <f:selectItem itemLabel="3" itemValue="3" /> <f:selectItem itemLabel="4" itemValue="4" /> <f:selectItem itemLabel="5" itemValue="5" /> <f:selectItem itemLabel="6" itemValue="6" /> <f:selectItem itemLabel="7" itemValue="7" /> <f:selectItem itemLabel="8" itemValue="8" /> <f:selectItem itemLabel="9" itemValue="9" /> <f:selectItem itemLabel="10" itemValue="10" /> </p:selectOneMenu>

No seu Bean :

...
public class atendimentoBean  implements Serializable{	

private String codigoOrdemTarefa;


public void alteraTarefa(Tarefa tar) {  
  
...

objeto.setCodigoOrdemTarefa(this.codigoOrdemTarefa);
  
 ....    
  
}  

//getters e setters

Só não esquece de colocar o <h:form> em volta do seu componente SelectOneMenu, como no link : http://www.primefaces.org/showcase/ui/selectOneMenu.jsf

Também não esquece que NESSE CASO, o valor do atributo só vai ser setado no bean, quando você clicar no commandButton que tem que estar dentro do form também para submeter os dados.

Um abraço !

G

Seu caso é mas simples que eu pensava:

<p:selectOneMenu id="selectOneTarOrdem" style="width: 130px;" value="#{atendimentoBean.codigoOrdemTarefa}" disabled="#{not atendimentoBean.habilitaTarefa}" effect="fade" > <f:selectItem itemLabel="Selecione" itemValue="0" /> <f:selectItem itemLabel="1" itemValue="1" /> <f:selectItem itemLabel="2" itemValue="2" /> <f:selectItem itemLabel="3" itemValue="3" /> <f:selectItem itemLabel="4" itemValue="4" /> <f:selectItem itemLabel="5" itemValue="5" /> <f:selectItem itemLabel="6" itemValue="6" /> <f:selectItem itemLabel="7" itemValue="7" /> <f:selectItem itemLabel="8" itemValue="8" /> <f:selectItem itemLabel="9" itemValue="9" /> <f:selectItem itemLabel="10" itemValue="10" /> </p:selectOneMenu>

No seu Bean :

...
public class atendimentoBean  implements Serializable{	

private String codigoOrdemTarefa;


public void alteraTarefa(Tarefa tar) {  
  
...

objeto.setCodigoOrdemTarefa(this.codigoOrdemTarefa);
  
 ....    
  
}  

//getters e setters

Só não esquece de colocar o <h:form> em volta do seu componente SelectOneMenu, como no link : http://www.primefaces.org/showcase/ui/selectOneMenu.jsf

Também não esquece que NESSE CASO, o valor do atributo só vai ser setado no bean, quando você clicar no commandButton que tem que estar dentro do form também para submeter os dados.

Um abraço !

G

Seu caso é mas simples que eu pensava:

<p:selectOneMenu id="selectOneTarOrdem" style="width: 130px;" value="#{atendimentoBean.codigoOrdemTarefa}" disabled="#{not atendimentoBean.habilitaTarefa}" effect="fade" > <f:selectItem itemLabel="Selecione" itemValue="0" /> <f:selectItem itemLabel="1" itemValue="1" /> <f:selectItem itemLabel="2" itemValue="2" /> <f:selectItem itemLabel="3" itemValue="3" /> <f:selectItem itemLabel="4" itemValue="4" /> <f:selectItem itemLabel="5" itemValue="5" /> <f:selectItem itemLabel="6" itemValue="6" /> <f:selectItem itemLabel="7" itemValue="7" /> <f:selectItem itemLabel="8" itemValue="8" /> <f:selectItem itemLabel="9" itemValue="9" /> <f:selectItem itemLabel="10" itemValue="10" /> </p:selectOneMenu>

No seu Bean :

...
public class atendimentoBean  implements Serializable{	

private String codigoOrdemTarefa;


public void alteraTarefa(Tarefa tar) {  
  
...

objeto.setCodigoOrdemTarefa(this.codigoOrdemTarefa);
  
 ....    
  
}  

//getters e setters

Só não esquece de colocar o <h:form> em volta do seu componente SelectOneMenu, como no link : http://www.primefaces.org/showcase/ui/selectOneMenu.jsf

Também não esquece que NESSE CASO, o valor do atributo só vai ser setado no bean, quando você clicar no commandButton que tem que estar dentro do form também para submeter os dados.

Um abraço !

N

No caso meu form fica na Template Gustavo, não deu certo…

Criado 12 de março de 2013
Ultima resposta 13 de mar. de 2013
Respostas 8
Participantes 2