quinta-feira, 16 de agosto de 2012

Hibernate 4.1.5 + TomCat 7 + JNDI Datasource + Oracle 10ge



<!-- A configuração abaixo deve ser adicionada ao context.xml do diretório conf do tomcat! -->
<Resource name="jdbc/testeDB"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="admin"
password="admin"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@192.168.0.9:1521:XE"
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"/>

OBS: Copiar ojdbc14.jar para o diretório lib do TomCat.

 <!-- Adicionar no Web.xml-->
 <resource-ref>
  <description>DataSource testeDB</description>
  <res-ref-name>jdbc/testeDB</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
 </resource-ref>


<!-- hibernate.cgf.xml -->
<!-- Configuração com Data Source -->
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.jdbc.use_streams_for_binary=">true</property>
<property name="hibernate.connection.datasource">java:/comp/env/jdbc/testeDB</property>
<property name="current_session_context_class">thread</property>
 
<!-- Configuração sem Data Source
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@192.168.0.9:1521:XE</property>
<property name="hibernate.connection.username">admin</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.password">admin</property>
<property name="hibernate.jdbc.use_streams_for_binary=">true</property>
 -->

<!-- Pool de Conexões - C3P0 
        Colocar JARs na pasta lib do TomCat
Não é necessário quando a conexão é feita através de um Data Source. Nesse caso, o poll deve ser configurado no context.xml

  <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.org.c3p0.min_size">3</property>
<property name="hibernate.org.c3p0.max_size">30</property>
<property name="hibernate.org.c3p0.timeout">10</property>
<property name="hibernate.org.c3p0.max_statements">0</property>
<property name="hibernate.org.c3p0.idle_test_period">30</property>
<property name="hibernate.org.c3p0.acquire_increment">5</property>
-->

terça-feira, 7 de agosto de 2012

Tomcat convertendo campos null para zero


Adicionar a seguinte linha em (VM Arguments) do Tomcat.

-Dorg.apache.el.parser.COERCE_TO_ZERO=false

Fonte: http://balusc.blogspot.com.br/2008/01/jsf-tutorial-with-eclipse-and-tomcat.html#IntegrateTomcatInEclipse

terça-feira, 31 de julho de 2012

Abrir em nova janela com h:commandButton


<h:commandButton action="#{bean.imprimir()}" value="imprimir"
onclick="this.form.target='_blank'">

Fazer JSF passar parâmetros via GET através do ManagedBean

Útil quando é necessário passar parâmetros via GET porém, os parâmetros ainda não estão no ManagedBean.


View


<h:commandButton action="#{flpImportacaoGrupoMB.imprimir()}" value="imprimir"
onclick="this.form.target='_blank'">

Faz com que seja aberta uma nova janela do navegador. Dessa forma você pode ter um form com botões abrindo na mesma janela ou em outra.

ManagedBean

public String imprimir(){
   return "relFlpParametrizadoGrupo?faces-redirect=true&grupo="+grupoSelecionado
+"&campo="+campoDataSelecionado
+"&tipoProcesso="+tipoProcessoSelecionado
+"&dataI="+getDataInicioFmt()
+"&dataF="+getDataFimFmt();
}

Converte de POST para GET.

quarta-feira, 25 de julho de 2012

Passar parâmetro via get no jsf 2

Página 1


<h:link target="_blank"
outcome="/pagina2" 
style="height:0px;width:0px;border-style:none;margin:0px;padding:0px;">
       <h:graphicImage value="/imagens/ImagensUtilizadas/16x16/doc6.png" />
       <f:param name="id" value="#{usuarioMB.id}"/>
</h:link>                              

Página 2

<ui:composition template="/templates/relatorio.xhtml">
       <f:metadata> 
           <f:viewParam name="id" value="#{usuarioMB.id}" />
       </f:metadata>

       <h:head>
             <meta http-equiv="content-Type" content="text/html; charset=utf-8" />
       </h:head>
       <ui:define name="centro">
             <h:form>
                    <h:outputText value="Id:" />
                    <h:outputText value="#{usuarioMB.usuario.id}"/>
                    <h:outputText value="Nome:"/>
                    <h:outputText value="#{usuarioMB.usuario.nome}"/>

             </h:form>
       </ui:define>
...

Recuperar dados do banco ao abrir a página 2:

Criar método no managed bean. 
@PostConstruct
public void carregar(){
   String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
            
   if(id != null && !id.equals("")){
      dao = new Dao<Usuario>(HibernateUtil.getSession(),  Usuario .class);
      usuariodao.get(Integer.parseInt(id) );
   }
}


sexta-feira, 20 de julho de 2012

java.lang.IllegalStateException: Cannot serialize a session while connected

Problema:
java.lang.IllegalStateException: Cannot serialize a session while connected

Local do erro (JSF):
valida.validaNavio(processoMB.processo.navio_id)

Causa do erro (Tipo do argumento incorreto):

public String validaNavio(String codigo){
     dao.loadByField("id", codigo);
}

Solução:
public String validaNavio(Integer codigo){
     dao.loadByField("id", codigo);
}

quinta-feira, 19 de julho de 2012

javax.faces.application.ViewExpiredException: viewId:/index.jsf - A exibição de /index.jsf não pôde ser restaurada.


javax.faces.application.ViewExpiredException: viewId:/index.jsf - A exibição de /index.jsf não pôde ser restaurada.

Para resolver, adicione as linhas abaixo no Web.xml

 <context-param>
  <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
  <param-value>client</param-value>
 </context-param>