Jsf - parâmetros

6 respostas
M

Olá,

Li vários tópicos sobre parâmetros…

http://www.guj.com.br/posts/list/47554.java
http://www.guj.com.br/posts/list/37440.java
http://www.guj.com.br/posts/list/43962.java
http://www.guj.com.br/posts/list/47088.java

mas não consegui sair do chão…

tenho um lista de cidades:
código descriçao
1 cidade a
2 cidade b

isso já está listando na página (conscidade.jsp) … agora qdo eu clicar em um código gostarid de mostrar os detalhes…

oque eu tenho:

conscidade.jsp:

<h:commandLink action="#{cidade.altera}">
<h:outputText value="#{cid.Codcidade}"/>
<f:param name=“codigo” value="#{cid.CodCidade}" />
</h:commandLink>

CidadeBean.java:


public String altera(){

String cod = getParameter("codigo");
return "alterar"

faces-config.xml

/conscidade.jsp insere /inserir.jsp cidade com.corejsf.CidadeBean session ...

o problema é que eu não consigo pegar o parâmetro?
ah…tb não sei se é nesse lugar que devo pegar os parâmetros ?
atualmente tá dando:
cannot find symbol method getParameter(java.lang.String)

como to querendo aprender to usando o JCreator

certamente deve estar faltando essa classe, mas qual é e onde encontro?

para finalizar gostaria de saber se o correto ou mais correto é usar parametros ou usar actionlistener?

Agradeço…e tô precisando mesmo dessa ajuda!
abraço

6 Respostas

Insonia

[editado]
esquece o comentario inicial… dei bobeira
[/editado]

Qto a duvida agora:

Eu jah utilizei commandLink passando parametros. Nunca utilizei um commandLink com um outputText dentro. Sempre utilizo apenas o commandLink, colocando como “value” o texto que quero apresentar. Algo assim:

<h:commandLink action="#{cidade.altera}" value="#{cid.Codcidade}">
 </h:commandLink>

Para passar parametros, vc fez certo (no jsp). Mas no faces-config vc deve informar que o teu bean tem uma propriedade.

Revisando, no jsp:

<h:commandLink action="#{cidade.altera}" value="#{cid.Codcidade}">
  <f:param name="codigo" value="#{cid.CodCidade}" /> 
 </h:commandLink>

No faces-config:

<managed-bean>
<managed-bean-name>cid</managed-bean-name>
<managed-bean-class>com.corejsf.CidadeBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
  <managed-property>
   <property-name>codigo</property-name>
   <value>#{param.codigo}</value>
  </managed-property>
</managed-bean>

Lembrando que, como definimos uma propriedade no faces-config chamada codigo, entao o Managed Bean PRECISA ter um metodo getCodigo/setCodigo.

Logo, no managed-bean CidadeBean.java:

public void setCodigo(String cod) { //cod possui o valor do parametro }

public String getCodigo(){ ... }

Assim eu acho que funciona :slight_smile: Espero ter ajudado…

M

blz… fiz as alterações…

cidade com.corejsf.CidadeBean session codigo #{param.codigo}

acredito que não preciso de um bean cid só com este cidade deve dar certo.

agora só preciso do saber qual import colocar para
cannot find symbol method getParameter(java.lang.String)

eu não poderia usar algo do tipo
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(“codigo”);

bom…assim ele não encontra o FacesContext

valeu
t+

Insonia

Hum… eu andei vendo o teu primeiro post, e o trecho abaixo me faz supor qual o motivo do erro:

CidadeBean.java:

...
public String altera(){

String cod = getParameter("codigo");
return "alterar"
...

Para recuperar o valor do parametro, vc deve utilizar :

getCodigo()

Definimos os metodos get/setCodigo no ManagedBean… basta utiliza-lo agora :wink:

Acho que isso resolve…

M

olha… não cheguei lá…

jsp
<h:commandLink action="#{cidade.altera}">
<h:outputText value="#{cid.Codcidade}"/>
<f:param name=“codigo” value="#{cid.CodCidade}" />
</h:commandLink>

classe
get e set

faces-config

cidade
com.corejsf.CidadeBean
session

codigo
#{param.codigo}

mas dá o seguinte erro…

javax.faces.FacesException: javax.faces.FacesException: The scope of the referenced object: ‘#{param.codigo}’ is shorter than the referring object

aproveito tb para perguntar se não tem como só recuperar o parâmetro sem defini-lo no faces-config?

valeu
t+

Insonia

Talvez este erro esteja ocorrendo porque vc está usando o escopo de sessao… eu sempre usei escopo = request.

managed-bean-scope>request</managed-bean-scope>

Sempre fui aconselhado a usar escopo de sessao somente se necessario, pois podemos estar consumindo recursos do servidor sem necessidade. Repasso o conselho pra ti :wink:

Nao sou um conhecedor muito grande de JSF. Só sei como utilizar parametros da forma como eu te mostrei. Eu uso e funciona numa boa! Talvez outros usuarios do forum possam te mostrar uma alternativa diferente.

Uma duvida: quem eh esse bean “cid”? o Bean “cidade” eu vi a definicao, mas esse bean “cid” eu ainda nao vi… ele existe?

M

Vamos lá…

face-config

cidade com.corejsf.CidadeBean codigo #{param.codigo} request

.jsp

<h:dataTable value="#{cidade.todas}" var="cid">
           <h:column>
              <f:facet name="header">
                 <h:commandLink action="">
                    <h:outputText value="Código"/>
                 </h:commandLink>
                 
              </f:facet>
                <h:commandLink action="#{cidade.altera}">
                  <h:outputText value="#{cid.Codcidade}"/>
                  <f:param name="codigo" value="#{cid.CodCidade}" 
                </h:commandLink>
              
              
           </h:column>
           
           <h:column>
              <f:facet name="header">
                 <h:commandLink value="Descrição"/>
              </f:facet>
              <h:outputText value="#{cid.Descricao}"/>
           </h:column>
      
        </h:dataTable>

ERRO:

Can’t set managed bean property: ‘codigo’.

não entendo pq dá isso …qual é o erro?

valeu
t+

Criado 8 de dezembro de 2006
Ultima resposta 11 de dez. de 2006
Respostas 6
Participantes 2