Iniciante em JBoss Seam

Ola, estou aprendedo essas tecnologias,

Jboss 5.1 Seam 2.2 JSF 1.2

Tá acontecendo um problema quando clico no botao pra ir para outra pagina, porém preciso passar pelo método antes pois terei que registrar Log.

na minha página fiz o seguinte

<h:commandButton action="#{votacaoHandler.sairVotacao}" id="teste"
			 				class="MudaDiv" alt="sair" title="sair"> 
			</h:commandButton>

No método

@Name("votacaoHandler")  
public class VotacaoHandler {  
  public String getSairVotacao() throws Exception{  
           System.out.println("sair");  
           return "/pages/sairVotacao.xhtml";  
       }  
   }  

Acontece o seguinte erro quando clico no botão

[javax.enterprise.resource.webcontainer.jsf.application] javax.el.PropertyNotFoundException: /pages/informacao.xhtml @23,49 action="#{votacaoHandler.sairVotacao}": Target Unreachable, identifier 'votacaoHandler' resolved to null: javax.faces.el.EvaluationException: javax.el.PropertyNotFoundException: /pages/informacao.xhtml @23,49 action="#{votacaoHandler.sairVotacao}": Target Unreachable, identifier 'votacaoHandler' resolved to null

Aguem tem ideia do que pode ser?

olha,

seu metodo pode chamar sairVotacao,
o retorno desse metodo tem que ser um nome que vc vai dar no mapeamento de navegação que vai fazer no faces-config.xml.

t+

Tenta assim as anotations…

@Name(value = "votacaoHandler")
@Scope(value = ScopeType.SEU ESCOPO)

Tambem verifique as configurações do seam no web.xml

alissonvla: No Jboss Seam quando coloca a anotação no nome da classe também precisa coloca no faces-config.xm? Tem como vc me amostrar um exemplo.

rat000: Mudei a anotação e continua com erro. Meu Web.xml tá assim:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>votacaoweb</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.seam</url-pattern>
  </servlet-mapping>
  <context-param>
    <param-name>org.jboss.jbossfaces.JSF_CONFIG_NAME</param-name>
    <param-value>Mojarra-1.2</param-value>
  </context-param>
  <context-param>
    <param-name>org.richfaces.SKIN</param-name>
    <param-value>blueSky</param-value>
  </context-param>
  <listener>
    <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
  </listener>
  <filter>
    <filter-name>Seam Filter</filter-name>
    <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>Seam Filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>  
  <servlet>
    <servlet-name>Seam Resource Servlet</servlet-name>
    <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Seam Resource Servlet</servlet-name>
    <url-pattern>/seam/resource/*</url-pattern>
  </servlet-mapping>
  <context-param>
    <param-name>facelets.DEVELOPMENT</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
  </context-param>
  <security-constraint>
    <display-name>Restrict raw XHTML Documents</display-name>
    <web-resource-collection>
      <web-resource-name>XHTML</web-resource-name>
      <url-pattern>*.xhtml</url-pattern>
    </web-resource-collection>
    <auth-constraint/>
  </security-constraint>
</web-app>

sua regra de navegação vai ser o msm do JSF,

segue um exemplo do faces-config.xml

<navigation-rule>
  <from-view-id>/paginas/changePassword.xhtml</from-view-id>
  <navigation-case>
   <from-outcome>principal</from-outcome>
   <to-view-id>/paginas/principal.xhtml</to-view-id>
   <redirect/>
  </navigation-case>
  <navigation-case>
   <from-outcome>ondeEstou</from-outcome>
   <to-view-id>/paginas/ondeEstou.xhtml</to-view-id>
   <redirect/>
  </navigation-case>
 </navigation-rule>

me esqueci de dizer que não consigo nem entrar no método, eu coloquei um

System.out.println("sair");     

que não exibido.

Verifique se o managed beam esta subindo no servidor… exemplo

13:53:26,130 INFO  [Component] Component: SeuMB, scope: PAGE, type: JAVA_BEAN, class: com....SeuMB

Também verifique se há no .war ou .ear, o arquivo “seam.properties” dentro do pacote de classes que encontram-se anotações do seam.

Espero ter ajudado.

rat000 eu possui o arquivo seam.properties no modulo do ejb porém esse arquivo tá todo vazio.

Exato ele é vazio mesmo. Ele indica que há componentes seam no pacote.

no pacote que encontra esse seu managed beam deverá ter este arquivo de propriedades.

primeiramente me desculpe a todos pela minha ignorancia, pois estou aprendendo.

vou falar uma duvida que talves seja por isso que esteja acontecendo esse problema.

criei um projeto Seam Web Project , escolhi a opção ejb.

no pacote do ejb possui hoje 2 pacotes que são os entity e session e possui o seam.properties

no pacote web possui o logic e as pages

não sei se essa estrutura é a correta, aceito sugestões e/ou criticas.

Bem a unica coisa que sei que preciso no ejb que tenho q ter os metodos que irão fazer acesso ao banco, que no meu caso serão procedures.
Na minha ideia na parte web eu terei os pages que irao se comunicar com a parte logic tbm do web que nele terão metodos que irei sempre registrar o log4j e chamar os metodos das procedures do ejb.

depois que li que o rat000 disse percebi que tem algo de errado com essa minha ideia, pois meu arquivo seam.properties esta no ejb e eu faço o metodo do botao no web.

nao sei se consegui explicar direito.

mas desde já obrigada a todos

Faça um teste.
Insira um ‘seam.properties’ no seu pacote web.
Seu managedBeam utiliza annotations seam como não há o arquivo ele está ignorando essas anotations.

que legal, é isso mesmo =D

agora mais uma perguntinha, desse jeito que to fazendo, as divisoes… ta da forma correta ou a melhor

muito obrigada

Legal!

Olha, aqui a gente utiliza uma estrutura semelhante. Separando as camadas.

  • camada de negocio fica num source. É empacotado num jar.
  • camada de visualização em outro. É empacotado num war.

Dai junta os dois no ear que vai pro servidor.

legal,

bem eu coloquei no meu método um System.out.println, e ao meu ver só deveria chamar esse método quando eu clicasse no botão

<h:commandButton action="#{votacaoHandler.sairVotacao()}" id="teste" value="teste" />

porém percebi na console que ao entrar na tela, ele já lista na console a mensagem que printei no método sairVotacao

@Name("votacaoHandler")
@Scope(value=ScopeType.SESSION)
public class VotacaoHandler{
	public String sairVotacao() throws Exception{
		System.out.println("sair");
		return "/pages/sairVotacao.xhtml";
	}
}

Porque eu sem clicar no método ele já entra nele e exibe na console a msg. tá faltando algo ou é assim mesmo q ele funciona?

Estranho ele chamar sem clicar no button.

Da uma olhada no pages.xml se não tem nenhuma
<action execute="’ /> ou chamada do método no construtor do managed Beam…

A respeito do return do metodo ele tem que retornar uma pagina .seam não xhtml.

Ps: a respeito da pagina .seam tem que verificar no seu web.xml como que está declarado.

No meu pages.xml não tem nenhum <action execute="’ /> e nao tem nenhum outro lugar que chama o método, só mesmo na action do botao

<?xml version="1.0" encoding="UTF-8"?>
<pages xmlns="http://jboss.com/products/seam/pages"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.2.xsd"

       no-conversation-view-id="/home.xhtml"
       login-view-id="/login.xhtml">

    <page view-id="*">
        <navigation>
            <rule if-outcome="home">
                <redirect view-id="/home.xhtml"/>
            </rule>
        </navigation>
    </page>

    <exception class="org.jboss.seam.framework.EntityNotFoundException">
        <redirect view-id="/error.xhtml">
            <message severity="warn">Record not found</message>
        </redirect>
    </exception>
    
    <exception class="javax.persistence.EntityNotFoundException">
        <redirect view-id="/error.xhtml">
            <message severity="warn">Record not found</message>
        </redirect>
    </exception>
    
    <exception class="javax.persistence.EntityExistsException">
        <redirect view-id="/error.xhtml">
            <message severity="warn">Duplicate record</message>
        </redirect>
    </exception>
    
    <exception class="javax.persistence.OptimisticLockException">
        <end-conversation/>
        <redirect view-id="/error.xhtml">
            <message severity="warn">Another user changed the same data, please try again</message>
        </redirect>
    </exception>
    
    <exception class="org.jboss.seam.security.AuthorizationException">
        <redirect view-id="/error.xhtml">
            <message severity="error">You don't have permission to access this resource</message>
        </redirect>
    </exception>
    
    <exception class="org.jboss.seam.security.NotLoggedInException">
        <redirect view-id="/login.xhtml">
            <message severity="warn">#{messages['org.jboss.seam.NotLoggedIn']}</message>
        </redirect>
    </exception>
    
    <exception class="javax.faces.application.ViewExpiredException">
        <redirect view-id="/error.xhtml">
            <message severity="warn">Your session has timed out, please try again</message>
        </redirect>
    </exception>
    
    <exception class="org.jboss.seam.ConcurrentRequestTimeoutException" log-level="trace">
      <http-error error-code="503" />
    </exception>
     
    <exception>
        <redirect view-id="/error.xhtml">
            <message severity="error">Unexpected error, please try again</message>
        </redirect>
    </exception>
    
</pages>

O return da página depois que parei e startei funcionou com o arquivo da página .xhtml, tá errado?