alias
Dezembro 21, 2009, 11:52am
#1
Olá amigos do fórum. Venho a voces novamente em busca de ajuda.
Vejam essa regra de navegação:
<navigation-rule>
<from-view-id>/view/anuncio/Anuncie.xhtml</from-view-id>
<navigation-case>
<from-outcome>goLogin</from-outcome>
<to-view-id>/view/anuncio/LoginAnuncio.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
Ela funciona corretamente.No entanto, por uma necessidade do negocio, eu gostaria que a URL do browser NÃO mudasse no momento dessa troca de paginas, e que o escopo do meu bean não fosse perdido. A principio, para fazer isso bastaria retirar o para que o JSF fizesse um foward no momento da navegação.
Porem, quando tiro o redirect, a navegação pára de funcionar…nao avança para a proxima pagina.
É necessario mais alguma coisa para trabalhar com o foward?
Obrigado!
Nao eh necessario…
poste o codigo que efetua a navegacao…
Sua pagina e seu managedbean… pra ver!
VALEU
alias
Dezembro 21, 2009, 12:56pm
#3
Aí velhao…essa é a página
[code]<?xml version="1.0" encoding="ISO-8859-1"?>
<ui:composition template="../template/Template.xhtml">
<ui:define name="center">
<a4j:loadStyle src="../css/PlanoAnuncio.css" />
<div align="center" style="margin-top: 0px;">
<rich:panel style="width:100%;" >
<h:form>
<table width="100%">
<tr>
<td valign="top" align="left">
<rich:panelMenu width="200px" iconGroupPosition="left" iconGroupTopPosition="left"
iconCollapsedGroup="triagleDown"
iconExpandedGroup="triangleUp"
iconCollapsedTopGroup="triangleDown"
iconExpandedTopGroup="triangleUp"
iconItem="triangle">
<rich:panelMenuGroup expanded="true" label="Anunciante Particular (Pessoa Física)" styleClass="panel-menu-group-header">
<rich:panelMenuItem label="Carros" styleClass="panel-menu-item" action="#{anuncioManagedBean.planoAnuncioView.selectedTipoVeiculo}" >
<f:param name="idTipoVeiculo" value="1" />
</rich:panelMenuItem>
<rich:panelMenuItem label="Motos" styleClass="panel-menu-item" action="#{anuncioManagedBean.planoAnuncioView.selectedTipoVeiculo}" >
<f:param name="idTipoVeiculo" value="2" />
</rich:panelMenuItem>
<rich:panelMenuItem label="Veículos Pesados" styleClass="panel-menu-item" action="#{anuncioManagedBean.planoAnuncioView.selectedTipoVeiculo}" >
<f:param name="idTipoVeiculo" value="3" />
</rich:panelMenuItem>
<rich:panelMenuItem label="Náuticos" styleClass="panel-menu-item" action="#{anuncioManagedBean.planoAnuncioView.selectedTipoVeiculo}" >
<f:param name="idTipoVeiculo" value="4" />
</rich:panelMenuItem>
<rich:panelMenuItem label="Colecionáveis" styleClass="panel-menu-item" action="#{anuncioManagedBean.planoAnuncioView.selectedTipoVeiculo}" >
<f:param name="idTipoVeiculo" value="5" />
</rich:panelMenuItem>
</rich:panelMenuGroup>
</rich:panelMenu>
</td>
<td valign="top">
<rich:panel style="padding-left:-10px;">
<a4j:loadStyle src="../css/Localizable.css" />
<rich:panel id="panelLocalizable" bodyClass="body-panel-localizable">
<div align="left">
<table align="left">
<tr>
<td valign="top">
<span style="white-space: nowrap;">Voce está em: </span>
</td>
<td valign="top">
<h:outputLink value="${request.contextPath}/view/index.html" styleClass="link-localizable">
<h:outputText value="Easy Motors > " />
</h:outputLink>
</td>
<td valign="top">
<h:outputLink value="Anuncie.html" styleClass="link-localizable">
<h:outputText value="Anuncie Seu Veículo > " />
</h:outputLink>
</td>
<td>
<h:outputText id="currentItem" value="Plano de Anúncio" styleClass="link-localizable-current" />
<div align="center">
<img src="../images/favicon.ico" height="20px" />
</div>
</td>
</tr>
</table>
</div>
</rich:panel>
<br /><br /><br />
<div align="left" class="div-data-plano-anuncio">
<div align="left">
<br />
<span class="title-div-planos-anuncio">Plano de Anúncio</span>
<br /><br />
<span>Selecione o plano de anúncio que mais se adequa a você</span>
<br />
<div>
<rich:dataGrid id="grid-planos" styleClass="grid-table-planos" border="0px" var="item" columns="1" value="#{anuncioManagedBean.planoAnuncioView.planos}" rowKeyVar="row" >
<h:panelGrid columns="2">
<a4j:mediaOutput element="img" cacheable="false" session="false" mimeType="image/jpeg" createContent="#{anuncioManagedBean.planoAnuncioView.paintImage}" value="#{row}" >
</a4j:mediaOutput>
<rich:panel>
<table align="center" cellspacing="15">
<tr>
<td align="center">
<h:outputText value="#{item.nome} - #{item.descQtDias}" styleClass="nome-plano" />
</td>
</tr>
<tr>
<td align="center">
<h:outputText value="#{item.descPrioridade} prioridade de exibição de busca" styleClass="info-plano" />
</td>
</tr>
<tr>
<td align="center">
<h:outputText value="#{item.qtFotos} fotos no detalhe do carro" styleClass="info-plano" />
</td>
</tr>
<tr>
<td align="center">
<h:outputText value="Preço:" styleClass="preco-plano" />
<rich:spacer width="10" />
<h:outputText value="#{item.preco}" styleClass="preco-plano" >
<f:convertNumber type="currency"/>
</h:outputText>
</td>
</tr>
<tr>
<td align="center">
<a4j:commandLink value="Veja como ficaria o seu anúncio" onclick="Richfaces.showModalPanel('grid-planos:#{row}:modal-detalhe');" ajaxSingle="true" />
</td>
</tr>
<tr>
<td align="center">
<a4j:commandLink value="Anuncie" styleClass="link-anuncie" action="#{anuncioManagedBean.planoAnuncioView.selectItem}" >
<f:setPropertyActionListener value="#{item}" target="#{anuncioManagedBean.planoAnuncioView.planoAnuncioTo}" />
</a4j:commandLink>
</td>
</tr>
</table>
</rich:panel>
</h:panelGrid>
<br />
<rich:modalPanel top="100" height="450" width="650" id="modal-detalhe" >
<a4j:loadStyle src="../css/ModalPanel.css" />
<f:facet name="header">
<h:outputText id="titulo" styleClass="title-modal-detalhe" value="#{item.nome} - #{item.descQtDias}" />
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="../images/CloseIcon.png" styleClass="hidelink" id="hidelink"/>
<rich:componentControl for="modal-detalhe" attachTo="hidelink" operation="hide" event="onclick"/>
</h:panelGroup>
</f:facet>
<a4j:mediaOutput element="img" cacheable="false" session="false" mimeType="image/jpeg" createContent="#{anuncioManagedBean.planoAnuncioView.paintImageDetalhePlano}" value="#{row}" >
</a4j:mediaOutput>
</rich:modalPanel>
</rich:dataGrid>
</div>
</div>
</div>
</rich:panel>
</td>
</tr>
</table>
</h:form>
</rich:panel>
</div>
</ui:define>
</ui:composition>
[/code]
E esse é o método da minha classe, que redireciona…ao menos quando tem o na regra :lol:
[code]public String selectItem(){
setChanged();
notifyObservers(planoAnuncioTo);
return "goLogin";
}[/code]
Está retornando a string pedida na regra de navegação…nao entendo porque nao está funcionando sem o redirect.
Obrigado!
Voce colocou assim:
Coloque assim:
<navigation-rule>
<from-view-id>/view/anuncio/Anuncie.xhtml</from-view-id>
<navigation-case>
<from-action>#{anuncioManagedBean.planoAnuncioView.selectItem}</from-action>
<to-view-id>/view/anuncio/LoginAnuncio.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
Testa e dps posta feedback!
Vou dar um palpite:
Você está utilizando um componente Ajax (a4j:commandLink), que não faz reload da página. Por causa disso o forward não funciona.
Substitua por um h:commandLink.
A propósito:
Não sei se você já chegou a pesquisar sobre esse assunto, mas vou dar uma dica. Se já souber disso não tem problema, fica para outros mais iniciantes que visitarem o tópico:
-> É importante conhecer bem a diferença entre Forward e Redirect. É comum se achar que a única diferença é que muda a URL no browser, mas não é isso, as requisições funcionam de maneira totalmente diferente. Uma boa explicação sobre o tema está na revista Mundo Java (número 38 ), em um artigo sobre erros comuns dos desenvolvedores JSF. Mas deve ter bastante material também na Internet.
alias
Dezembro 21, 2009, 1:42pm
#6
gomesrod, que chutaço no angulo cara :lol: …era isso mesmo. Realmente não havia necessidade do a4j:commandlink pois nao queria enviar requisição ajax nessa pagina, e até mesmo o meu form era um h:form normal…enfim, alterando pro h:commandlink rolou.
Agradeço sua dica mas eu já tinha sim pesquisado sobre a diferença entre o redirect e o forward, e justamente a diferença na forma como é feita a request foi o que me levou a usar o forward. Mas fica registrado pra quem nao conhece.
A proposito, recomendo esse otimo post do Rafael Ponte sobre o assunto: http://www.rponte.com.br/2008/07/12/repitam-comigo-redirect-nao-e-forward/
JonathanSSantos , valeu pela ajuda tambem velho, e a todos que visitaram o topico. Obrigado.