JSF 1.2 + FacesContext + rich:modalPanel

5 respostas
ViniciusNaka

bom dia galera…
estou com uma dúvida referente ao jsf 1.2 e o FacesContext…
estou tentando renderizar um rich:modalPanel através de um h:selectOneMenu… qndo o usuario mudar o valor ele vai la no meu MB, executa meu método atualizando 2 listas e renderizar o modalPanel, só que da forma que estou fazendo esta dando um refresh na minha página e com isso o modelPanel fecha e não abre novamente.
Abaixo meus códigos…

Método do MB…

public void changeWords(ValueChangeEvent ev) throws Exception {
		
		FacesContext fc = FacesContext.getCurrentInstance();
		wordSpottingCategory.setIdCategory((Integer) ev.getNewValue());
		
		if(group.getGroupId() != null){
			listNewsWordSpotting = wordSpottingDAO.findAllByGroupAndCategory(group, wordSpottingCategory);
			if(listNewsWordSpotting.size() > 0){
				for(int i=0; i < listNewsWordSpotting.size(); i++){
					WordSpotting word = listNewsWordSpotting.get(i);
					if(listWordSpotting.contains(word)){
						listWordSpotting.remove(word);
						--i;
					}
				}
			}			
		}
		fc.getApplication().getNavigationHandler().handleNavigation(fc, null, "template_lista_grupo"); // ESSA LINHA ESTA CERTA ??  OU EU SETTO A PAGINA DO MEU MODELPANEL??
	}

Ah, meu modalPanel da um include de outra tela… que é o xhtml mais abaixo…

<!-- MODALPANEL DE EDICAO DAS PALAVRAS -->	
	<rich:modalPanel id="mdlEditGroupSpotting" autosized="true" width="600">
		<f:facet name="header">
			<h:panelGroup>
				<h:outputText value="#{messages['spotting.group.edit.word']}"></h:outputText>
			</h:panelGroup>
		</f:facet>
		<f:facet name="controls">
			<h:panelGroup>
				<h:graphicImage value="/images/fechar.png" styleClass="hidelink"
					width="20" height="20" id="lnkEditGroupSpotting" />
				<rich:componentControl for="mdlEditGroupSpotting"
					attachTo="lnkEditGroupSpotting" operation="hide" event="onclick" />
			</h:panelGroup>
		</f:facet>
		<ui:include src="/paginas/grupo/template_edit_grupo_spotting.xhtml" />
	</rich:modalPanel>

xhmtl…

<h:selectOneMenu value="#{businessGroup.wordSpottingCategory.idCategory}"
								id="category_palavra_group_edit" style="margin-left: 20px;" 
								valueChangeListener="#{businessGroup.changeWords}" onchange="submit()">
								<a:support reRender="pnl_edit_word" event="onchange" 
									oncomplete="#{rich:component('mdlEditGroupSpotting')}.show()" />								
								<f:selectItem itemLabel="#{messages['spotting.tipo.select']}" 
									itemValue="0" />			
								<f:selectItems value="#{businessGroup.listAllCategories}" />								
							</h:selectOneMenu>

desde já agradeço a atenção…

Abs

5 Respostas

R

Precisa o rich:modal estar FORA do form,e DENTRO do rich:modal ter um form

R

Uma dica:quando usar h:selectOneMenu ,pegue o objeto diretamente,em vez de pegar o id e depois recuperar o objeto.

Em vez disso:

&lt;h:selectOneMenu value="#{businessGroup.wordSpottingCategory.idCategory}"

Faça isso:

&gt;&lt;h:selectOneMenu value="#{businessGroup.wordSpottingCategory}"

Dá uma pesquisada na net que vc acha exemplos de converters genéricos.
>

ViniciusNaka

ele ja estava fora do form. Criei um form para ele como sugeriu, mas acontece a mesma coisa a pagina é atualizada e o modelPanel fechado.
Esta certa a parte do FacesContext ?
referente a dica vou dar uma pesquisada.

R

Cara,se vc estiver o usando o RichFaces basta usar o a4j:support pra reRenderizar o componente,não precisa fazer esse redirect.

ViniciusNaka

ok… do jeito que esta meu <a:support> esta correto? pq ele não esta funcionando :cry:

<a:support reRender="pnl_edit_word" event="valueChange" oncomplete="#{rich:component('mdlEditGroupSpotting')}.show()" />

só para vc analisar melhor… o xhtml abaixo é a pagina que é incluída no modelPanel

<a:outputPanel id="outEditSpottingGroup">
		<a:form id="edit_spotting_group">
			<ui:include src="/paginas/error/template_error_message.xhtml" />
				<rich:panel id="pnl_edit_group">
					<h:panelGrid columns="4">
							<h:outputLabel value="#{messages['group.register.name']}"
								for="name_group" />
							<h:inputText id="name_group" value="#{businessGroup.group.name}" />
							<h:outputLabel value="#{messages['comum.select.one.option']}"
								for="category_palavra_group_edit" />
								
							<h:selectOneMenu value="#{businessGroup.wordSpottingCategory.idCategory}"
								id="category_palavra_group_edit" style="margin-left: 20px;" 
								valueChangeListener="#{businessGroup.changeWords}" onchange="submit()">
								<a:support reRender="pnl_edit_word" event="valueChange"   
									oncomplete="#{rich:component('mdlEditGroupSpotting')}.show()" />								
								<f:selectItem itemLabel="#{messages['spotting.tipo.select']}" 
									itemValue="0" />								
								<f:selectItems value="#{businessGroup.listAllCategories}" />								
							</h:selectOneMenu>						
					</h:panelGrid>
				</rich:panel>
				<rich:panel id="pnl_edit_word">	
					<h:panelGrid columns="2">						
							<!-- PALAVRAS -->
							<rich:listShuttle id="listShuttle_Spotting_Group_Edit" 
								sourceValue="#{businessGroup.listWordSpotting}"
								targetValue="#{businessGroup.listNewsWordSpotting}"
								var="wordSpotting" listsHeight="200"
								sourceCaptionLabel="Palavras Disponíveis"
								targetCaptionLabel="Palavras Associadas" sourceListWidth="150"
								targetListWidth="150" copyAllControlLabel="Associar todos"
								copyControlLabel="Associar"
								removeAllControlLabel="Remover todos"
								removeControlLabel="Remover" copyAllTitle="Associar todos"
								copyTitle="Associar" removeAllTitle="Remover todos"
								removeTitle="Remover" converter="#{wordConverter}">
								<h:outputText value="#{wordSpotting.chWordName}" />
							</rich:listShuttle>
					</h:panelGrid>						
				</rich:panel>			
		</a:form>
	</a:outputPanel>
Criado 9 de fevereiro de 2012
Ultima resposta 9 de fev. de 2012
Respostas 5
Participantes 2