Problemas de Upload de arquivos com Primefaces?

Problemas de Upload de arquivos com Primefaces?

Verifique se adicionou em seu web.xml:

    <!-- Muito importante -->
	<context-param>
		<param-name>primefaces.UPLOADER</param-name>
		<param-value>commons</param-value>
	</context-param>	
	
	<filter>
	 <filter-name>PrimeFaces FileUpload Filter</filter-name>
	 <filter-class>
	  org.primefaces.webapp.filter.FileUploadFilter
	 </filter-class>
	</filter>
	<filter-mapping>
	 <filter-name>PrimeFaces FileUpload Filter</filter-name>
	 <servlet-name>Faces Servlet</servlet-name>
	</filter-mapping>
	
	<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>/faces/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
    <context-param>
        <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>client</param-value>
    </context-param>
    <context-param>
        <param-name>primefaces.UPLOADER</param-name>
        <param-value>auto</param-value>
    </context-param>
    <listener>
        <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
    </listener>	
  

A dependencias para upload de arquivos são:

		
		<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <!-- Faces Implementation -->
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>2.2.4</version>
        </dependency>
        <!-- Faces Library -->
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.2.4</version>
        </dependency>
        <!-- Primefaces Version 5 -->
        <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <version>5.0</version>
        </dependency>
		<!-- File uploads -->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.2.1</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>1.4</version>
		</dependency>  
		
        <!-- JSP Library -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
        </dependency>
        <!-- JSTL Library -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.1.2</version>
        </dependency>		
	

index.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Journaldev Tutorial</title>
    </h:head>
    <h:body>
        <h:form enctype="multipart/form-data">
                <p:fileUpload value="#{fileUploadManagedBean.file}"  mode="simple"></p:fileUpload>
                <p:separator/>
                <h:commandButton value="Dummy Action" action="#{fileUploadManagedBean.dummyAction}"></h:commandButton>
        </h:form>
    </h:body>
</html>		

FileUploadManagedBean.java:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
 
import org.primefaces.model.UploadedFile;
 
@ManagedBean
@SessionScoped
public class FileUploadManagedBean {
    UploadedFile file;
 
    public UploadedFile getFile() {
        return file;
    }
 
    public void setFile(UploadedFile file) {
        this.file = file;
    }
 
    public String dummyAction(){
        System.out.println("O nome do arquivo é "+file.getFileName()+" :: Uploaded File Size :: "+file.getSize());
        return "";
    }
}

Conclusão
Este artigo tem intenção de prover uma explicação da utilização do FileUpload do Primefaces. Caso não esteja conseguindo realizar upload, tente verificar se todos os passos estão realizados e não falta nenhum detalhe. O componente FileUpload tem muitas funcionalidades e permite que o programador mantenha o foco do trabalho nas regras de negócio ao invés de ficar reinventando a roda.

Java 8 e StringJoiner

Na ultima versão do Java 8 foi adicionado o StringJoiner no pacote java.util.
É uma implementação juntar as pedaços em comparação, um facilitador da antiga abordagem usando StringBuffer / StringBuilder.
Vamos ver o uso do StringJoiner e como funciona a implementação.

Por exemplo, tenho duas cadeias como “Andre” e “Rezende” e eu quero juntar essas cadeias como [Andre, Rezende]. Neste caso, eu tenho o prefixo como “[“, o sufixo como “]” e o delimitador como “,”. StringJoiner tem dois construtores como dado abaixo.
StringJoiner (CharSequence delimitador)
StringJoiner (CharSequence delimitador, CharSequence prefixo, sufixo CharSequence)
Queremos ter prefixo e sufixo, portanto, vamos usar o segundo construtor para o nosso exemplo.

StringJoiner sjr = new StringJoiner(",", "[", "]");
sjr.add("Andre").add("Rezende");
System.out.println("A string final é " + sjr);

Resultado será a saída no console: A string final é [Andre,Rezende]

Se não quiser adicionar o prefixo e sufixo, então:

StringJoiner sjr1 = new StringJoiner(",");
sjr1.add("Andre").add("Rezende");
System.out.println("A string final é " + sjr1);

Resultado será a saída no console: A string final é [Andre,Rezende]

Conclusão, não é uma baita implementação, ainda pode-se utilizar a StringBuilder ou StringBuffer, mas ele facilita um pouco a vida do desenvolvedor.

Qual a diferença entre JDBC e JDBI?

Recentemente um colega meu me indicou o usou de JDBI para substituir um ORM. ORM é bom para quem trabalha com múltiplos banco de dados e necessita colocar a mesma aplicação para consumir diferentes bancos de dados. Essa facilidade tem um custo, o custo de performance, pois as ferramentas de ORM precisam converter as chamadas SQL do framework para chamadas que o banco compreende, ou semelhante a nativa.

Então, porque ao invés de não se realizar direto a chamada de JDBC e não tivesse um framework que agilize meu desenvolvimento, mas não comprometa a performance?

Pensando nisso, a galera criou o JDBI, não é nova, tem desde 2004, mas eu só vim descobrir recentemente.

jDBI é uma biblioteca construída em cima de JDBC. JDBC funciona muito bem, mas geralmente parece otimizar para os fornecedores de banco de dados (escritores drivers). jDBI tenta expor a mesma funcionalidade, mas em uma API otimizada para os desenvolvedores.

É nível muito mais baixo do que um ORM como Hibernate ou JPA. A biblioteca é semelhante ao MyBatis (sucessora bifurcada para iBATIS).

jDBI suporta duas APIs estilo, um estilo velho, que se parece com:

List<AlgumaClasse> r = h.createQuery("select * from algo where id = :id and nome = :nome")
.bind("nome", "andre")
.bind("id", 1)
.map(AlgumaClasse.class)
.list();

E o estilo novo da API SQL objeto, que trabalha de uma forma reflexiva  e realmente abstraindo o JDBC:

interface NovoAPISQL
{
@SqlUpdate("insert into algo (id, nome) values (:id, :nome)")
int insert(@Bind("id") int id, @Bind("nome") String nome);

@SqlQuery("select id, nome from algo where id = :id")
AlgumaClasse findById(@Bind("id") long id);
}

A biblioteca tem uma boa referência (javadoc) e documentação estilo tutorial em http://jdbi.org/.

Concluindo

Outro lado interessante é que a comunidade trabalha bastante em melhorias e correções nela, por ser open source.
Vale a pena pensar se seu time ou seu projeto não merece ganhar uma produtividade no trabalho com tarefas de DAO.

Meu github: https://github.com/andremrezende

Resolvendo o problema de scroll com href do HTML com Jscript

Se deseja evitar o scroll do href bastar adicionar ao evento “onclick” um “return false”.
Exemplo:
Se tem um código parecido como abaixo em seu HTML, isso ocasionará um scroll de página, retornando ao topo da página.

<a href='#' onclick="javascript:alert('oi');">Fechar</a>

Para evitar o scroll, adicione um “return false” ao final de sua chamada jscript ou retorne false de sua função.

<a href='#' onclick="javascript:alert('oi');return false;">;Fechar</a>

Código HTML completo:

<html>
<head>
</head>
<body>
43243324423<br>
dfgdgfd<br>
fdgfdg<br>
fdgg<br>
dgdfg<br>
fdgdgfd<br>
gddgdgfd<br>
gfdfdgfd<br>
fdgfghgfhfhjfg<br>
gfhgffhgfhgf<br>
gfhgfghgh<br>
hhhfghgfh<br>
ffff<br>
43243324423<br>
dfgdgfd<br>
fdgfdg<br>
fdgg<br>
gddgdgfd<br>
gfdfdgfd<br>
fdgfghgfhfhjfg<br>
gfhgffhgfhgf<br>
gfhgfghgh<br>
hhhfghgfh<br>
ffff43243324423<br>
dfgdgfd<br>
fdgfdg<br>
fdgg<br>
dgdfg<br>
fdgdgfd<br>
gddgdgfd<br>
gfdfdgfd<br>
fdgfghgfhfhjfg<br>
43243324423<br>
dfgdgfd<br>
gfdfdgfd<br>
fdgfghgfhfhjfg<br>
gfhgffhgfhgf<br>
gfhgfghgh<br>
hhhfghgfh<br>
ffff43243324423<br>
dfgdgfd<br>
fdgfdg<br>
fdgg<br>
dgdfg<br>
fdgdgfd<br>
gddgdgfd<br>
gfdfdgfd<br>
<a href='#' onclick="javascript:alert('oi'); return false">Fechar</a>
</body>
</html>

Ajudando a Oracle a melhorar suas certificações Java

Já realizei 3 certificações da ex Sun e não prossegui com outras certificações depois da aquisição pela Oracle. O motivo é simples, estou descontentado com obrigação de se realizar curso em algumas delas.  Todas as minhas certificações adquiri material e realizei os exames com louvor. Sei que um curso é uma maneira mais prática e rápida de se adquirir um conhecimento, mas não acho que o caminho da Oracle fosse tornar isso obrigatório.

Hoje descobri que a Oracle está querendo mudar esse universo. Ela está realizando um questionário para tornar mais atraente o programa de certificação Java.

Quem puder contribuir, acredito que ajudaria muito a melhorar nossa comunidade Java brasileira.

O link é https://www.surveymonkey.com/s/YDMC2Q5

Abraços,
André Rezende

A internet das coisas

Image

Muito tem se falado sobre a internet das coisas, porém um grande problema é integração de equipamentos de diversos fabricantes.

Uma tecnologia que tem como proposta resolver parte desse problema é o BLE (Bluetooth Low Energy), o qual também visa economizar energia do dispositivos que utilizam de Bluetooth.

Para quem conhece a Apple, essa ela pode ser encontrada sobre o nome de iBeacon.

O grande desafio agora é permitir que o os usuários/clientes aceitem a instalação de softwares e/ou firmwares para realizar essa integração.

Compre Gadgets da China

Links relacionados:

http://targethd.net/ces-2014-samsung-smart-home-e-a-aposta-por-um-lar-inteligente/

http://convergenciadigital.uol.com.br/cgi/cgilua.exe/sys/start.htm?infoid=35710&sid=15#.UsxqkctTtAg