sexta-feira, 31 de julho de 2015

Pesquisa automatica ao fim da pagina

Codigo para realizar a pesquisa automatica ao chegar ao final de uma pagina.


<script>
$(window).scroll(function() {  
if($(window).scrollTop() + $(window).height() > $(document).height() - 100) {
if(angular.element(document.getElementById('legend')).scope().cursor != null){
  angular.element(document.getElementById('legend')).scope().buscarObrigacao();
}
  }
});
</script>

quinta-feira, 24 de abril de 2014

Testando Endpoints

Após criado a classe do endpoint, para que ela seja acessível, deve ser mapeada no web.xml, conforme abaixo:

        <servlet>
<servlet-name>SystemServiceServlet</servlet-name>
<servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class>
<init-param>
<param-name>services</param-name>
<param-value>
br.com.super2.endpoint.ProjectEndpoint,
br.com.super2.endpoint.TaskEndpoint,
br.com.super2.endpoint.DiscussionEndpoint
</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SystemServiceServlet</servlet-name>
<url-pattern>/_ah/spi/*</url-pattern>
</servlet-mapping>


Ao executar o projeto, estar disponível a seguinte url: localhost:8888/_ah/api/explorer
Onde sera possível realizar os testes de todos os métodos do endpoint.

Criar endpoints com Google Cloud Endpoints

Após criado o projeto, criar a classe do endpoint com as anotações conforme abaixo. Onde:
@Api(name = "exampleProject") é o nome da aplicação
@ApiMethod(name =  "customers.list",, httpMethod = HttpMethod.GET) - é o nome do serviço


@Api(name = "exampleProject")
public class CustomerEndpoint {

private static final String ENTIDADE = "Cliente";

@ApiMethod(name =  "customers.list",, httpMethod = HttpMethod.GET)
public CollectionResponse<Customer> listCustomer() throws Exception {
try {
List<Customer> list = Customer.getDao().list();
return CollectionResponse.<Customer> builder().setItems(list).build();
} catch (Exception e) {
throw new Exception(String.format(Message.ERRO_LIST, ENTIDADE));
}
}

@ApiMethod(name = "customers.get", httpMethod = HttpMethod.GET)
public Customer getCustomer(@Named("id") Long id) throws Exception {
try {
return Customer.getDao().get(id);
} catch (Exception e) {
throw new Exception(String.format(Message.ERRO_GET, ENTIDADE));
}
}

@ApiMethod(name = "customers.insert", httpMethod = HttpMethod.POST)
public Customer insertCustomer(Customer model) throws Exception {
try {
return Customer.getDao().insert(model);
} catch (Exception e) {
throw new Exception(String.format(Message.ERRO_INSERT, ENTIDADE));
}
}

@ApiMethod(name = "customers.update", httpMethod = HttpMethod.PUT)
public Customer updateCustomer(Customer model) throws Exception {
try {
return Customer.getDao().update(model);
} catch (Exception e) {
throw new Exception(String.format(Message.ERRO_UPDATE, ENTIDADE));
}
}

@ApiMethod(name = "customers.remove", httpMethod = HttpMethod.DELETE)
public void removeCustomer(@Named("id") Long id) throws Exception {
try {
Customer.getDao().delete(id);
} catch (Exception e) {
throw new Exception(String.format(Message.ERRO_REMOVE, ENTIDADE));
}
}

Criar projeto Maven + Google Cloud Endpoints

O projeto pode ser criado via archetypes, conforme o link: appengine + maven

Após criado, as dependencias ficam como abaixo:

<dependencies>
<!-- Compile/runtime dependencies -->
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>${appengine.target.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

<!-- Test Dependencies -->
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-stubs</artifactId>
<version>${appengine.target.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.googlecode.objectify</groupId>
<artifactId>objectify</artifactId>
<version>5.0.2</version>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-endpoints</artifactId>
<version>${appengine.target.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
</dependencies>
 

terça-feira, 9 de junho de 2009

Obter valor de ManagedBean JSF 1.2

Método para obter valor de um ManagedBean na versão 1.2 do JSF.


public BaseViewBean accessBean(String beanName, Class viewClass) {

StringBuffer valueBinding = new StringBuffer();
valueBinding.append(CERQUILHA);
valueBinding.append(ABRE_CHAVES);
valueBinding.append(beanName);
valueBinding.append(FECHA_CHAVES);

ValueExpression exp = context.getApplication().getExpressionFactory()
.createValueExpression(context.getELContext(),
valueBinding.toString(), viewClass);

BaseViewBean bean = (BaseViewBean) exp.getValue(context.getELContext());

return bean;
}


Onde:
BaseViewBean - Classe ManagedBean padrão da qual todas extendem.

quinta-feira, 2 de abril de 2009

Acesso a banco via Hibernate

Para buscar a sessão responsável por executar o acesso ao banco, foi criado uma classe da seguinte forma:


import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {

private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new AnnotationConfiguration().configure()
.buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}

public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}


E para realizar o acesso, basta chama-la da seguinte forma:


public class UserDaoImpl implements UserDao {

private Session session;

public void salvar(User user) {
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
}

public List listar() {
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
List userList = session.createQuery("from User").list();
session.getTransaction().commit();
return userList;
}



E então resta apenas utilizar de forma simples:


User c1 = new User();
c1.setNome("Raul Seixas");

User c2 = new User();
c2.setNome("Bruce Dickinson");

UserDao clienteDAO = new UserDaoImpl();
clienteDAO.salvar(c1);
clienteDAO.salvar(c2);

Utilizando @SequenceGenerator do hibernate com o Firebird

Para utilizar Sequence do firebird, basta criar o generator no banco de dados:

"CREATE SEQUENCE GEN_USUARIO_ID;"

E depois disso, utilizar este nome na entidade, mapeando da seguinte forma:


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@SequenceGenerator(name = "INC_USUARIO", sequenceName = "GEN_USUARIO_ID")
@Table(name = "usuario")
public class User {

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "INC_USUARIO")
private Long id;

@Column
private String nome;


E o mapeamento do arquivo hibernate.cfg.xml fica normal.


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="Hibernate" >
<!-- Database connection settings -->
<property name="connection.driver_class">org.firebirdsql.jdbc.FBDriver</property>
<property name="connection.url">jdbc:firebirdsql:localhost/3050:E:\Desenv\Base\base.fdb</property>
<property name="connection.username">sysdba</property>
<property name="connection.password">masterkey</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.FirebirdDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>

<!-- property name="hibernate.hbm2ddl.auto">create</property> -->

<mapping class="br.com.viartes.entities.User" />
</session-factory>
</hibernate-configuration>

sexta-feira, 28 de setembro de 2007

Abrir paginas com Ajax

Navegação em uma pagina JSF, onde um componente ira receber dentro dele a pagina de se deseja abrir:


<af:commandLink actionListener="#{backing.funcao}"
styleClass="textoSubMenu"
id="LinkTeste"
partialSubmit="true"
onclick= "javascript:setaValor('../site/paginaTeste.jspx',
'descricao');">
<h:outputText value="#{msg.subMenuControladoria}"/>
</af:commandLink>


Nesse link(Componente do ADF), foi utilizado um actionListener para realizar umas funções na pagina, e a propriedade partialSubmit="true" , para evitar que toda a pagina fosse atualizada ao clicar (O funcionamento disso esta em um outro post).

Quando a ação de clique é disparada, então o javascript a seguir entra em ação para buscar a nova pagina e carrega-la dentro de um componente já definido.


function getXmlHttpRequestObject() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest(); //Not IE
} else if (window.ActiveXObject) {
return new ActiveXObject("Microsoft.XMLHTTP"); //IE
} else {
alert("Seu navegador não suporta essa navegação. Por favor Atualize!");
}
}
var receiveReq = getXmlHttpRequestObject();
var idcomp;
//Initiate the asyncronous request.

function setaValor(pagina , id ) {
//Deixa visivel a imagem e esconde o componente até ser carregado
document.getElementById(id).style.visibility = "hidden";
document.getElementById("loading").style.visibility = "visible";
if (receiveReq.readyState == 4 || receiveReq.readyState == 0) {
receiveReq.open("GET", pagina, true);
idcomp = id;
receiveReq.onreadystatechange = setar;
receiveReq.send(null);
}
}

function setar() {
if (receiveReq.readyState == 4) {
//esconde a imagem
document.getElementById("loading").style.visibility = "hidden";
//Joga a pagina requisitada para dentro do componente
document.getElementById(idcomp).innerHTML =
receiveReq.responseText;
//Deixa visivel o componente carregado
document.getElementById(idcomp).style.visibility = "visible";
}
}


Esse javascript ainda altera a propriedade visibility de um componente de id = loading:


<h:graphicImage url="/Imagens/loading.gif" id="loading" styleClass="figLoading"/>


Esse componente é apenas uma imagem do tipo gif, que usei para dar uma resposta ao usuário enquanto a pagina é carregada.(implementação bem simples).

Depois de carregado e mostrado pelo JavaScript, este é o componente que recebe a pagina que foi carregada:


<h:form styleClass="formDescSMenu" id="descricao"></h:form>

Grupo de JSF oficial do Brasil!

Um grupo internacional da língua portuguesa para discussão de conceitos e tecnologias Web como JavaServer Faces, RIA, patterns e ferramentas de desenvolvimento.

Grupo de JSF

segunda-feira, 10 de setembro de 2007

PartialRefresh e Partialtriggers para componentes ADF

Para que serve?
Atualizar componentes sem que seja preciso atualizar a pagina.

PartialRefresh
Atualizar um componente setando novas configurações ou opções a ele, dizendo apenas qual o componente a ser atualizado
/**
* Faz com que o componente passado por parâmentro seja
* atualizado na tela
* @param uic componente a ser atualizado
*/
private void doPartialRefresh(UIComponent uic) {
AdfFacesContext adfctx = AdfFacesContext.getCurrentInstance();
adfctx.addPartialTarget(uic);
}

Partialtriggers
Define que um componente será reatualizado quando algum outro por alterado

af:selectonechoice label="Teste"
required="true"
binding="#{backing_teste.oneChoice}"
partialtriggers="IdComponente"
id="selectOneChoice"
/af:selectonechoice


OBS: para que essa atualização ocorra normalmente o componente que ira disparar as alteraçoes deve estar com a propriedade autoSubmit ou partialSubmit setado para true