Programa Swing com Spring sendo chamado de um programa JSF/RichFaces
11/01/2010
0
Bom dia galera,
Alguem pode me ajudar me indicando com posso:
1o. Em uma aplicação JSF/RichFaces / String/JPA , rodando na internet eu consiga chamar um programa swing que rodará em um cliente, acessando as mesmas classes utilizadas na web.
2o. Nessa aplicação cliente preciso manter a conexao com o servidor usando spring e jpa e tambem imprimir um documento a partir de uma leitura em um campo jText onde irá enviar diretamente para impressora local os selects efetuados.
Ou seja, tentei a um tempo atras , imprimir pelo browse sem que o usuario utilizasse o mouse para selecionar a impressora ou algo parecido , imprimir diretamente para impressora atraves dessa consulta.
Funciona até um ponto, o programa seleciona e envia para impressora , so que no Servidor.
Por isso queria fazer esse mesmo programa local, tentando utilizar as mesmas caracteristicas usadas em meu BeanController onde executo a impressao:
Exemplo do Controller que imprime o relatorio.
/**
*
* @author victor
*/
@Controller("etiquetasController")
@Scope("session")
public class EtiquetasController {
private Pedido pedido;
private NotaFiscal notaFiscal;
private Cliente cliente;
private DataModel model;
@Resource
private DaoGenerico<Pedido, Integer> pedidoDao;
@Resource
private DaoGenerico<NotaFiscal, Integer> notafiscalDao;
@Resource
private DaoGenerico<Cliente, Integer> clienteDao;
private String fornecimento;
private Integer num_notafiscal;
public EtiquetasController() {
}
//separa a pesquisa do total encontrado
//possibilitando a utilização também no relatório
private List<?> todosResultsPesq() {
Map<String, Object> params = new HashMap<String, Object>();
params.put("nota", num_notafiscal);
return clienteDao.listPesqParam(consultaEtiqueta(), params);
}
private String consultaEtiqueta() {
String query = "SELECT p.fornecimento,p.isrisco,u.enderecoEntrega," +
" u.nomeCli,u.logradouro,u.bairro,u.cidade, u.cep," +
" p.obs_entrega,n.notafiscal,n.data_cria" +
" FROM Cliente u " +
" JOIN u.pedidos p" +
" JOIN u.notas n " +
" WHERE n.notafiscal = :nota";
return query;
}
@SuppressWarnings("unchecked")
public DataModel getEtiquetas() {
String query = "SELECT p.fornecimento,p.isrisco,u.enderecoEntrega," +
" u.nomeCli,u.logradouro,u.bairro,u.cidade, u.cep," +
" p.obs_entrega,n.notafiscal,n.data_cria" +
" FROM Cliente u " +
" JOIN u.pedidos p" +
" JOIN u.notas n " +
" WHERE n.notafiscal = :nota";
Map<String, Object> params = new HashMap<String, Object>();
params.put("nota", num_notafiscal);
return new ListDataModel(pedidoDao.listPesqParam(query, params));
}
//converte uma string para Timestamp
private Timestamp convertTimestamp(String t) throws ParseException, java.text.ParseException {
// trata nanoseconds "yyyy-mm-dd hh:mm:ss.nanoseconds"
SimpleDateFormat sdfIn =
new SimpleDateFormat("yyyy-MM-dd");
return new Timestamp(sdfIn.parse(t).getTime());
}
@SuppressWarnings("unchecked")
//executa o relatório através do actionListener
public void executarEtiqueta() throws IOException, java.text.ParseException, ParseException {
todosResultsPesq();
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
//pega o caminho do arquivo .jasper da aplicação
InputStream reportStream = context.getExternalContext().getResourceAsStream("/reporter/etiquetas/EtiquetaEndereco.jasper");
//envia a resposta com o MIME Type PDF
response.setContentType("application/pdf");
/*for�a a abertura de download */
response.setHeader("Content-disposition",
"attachment;filename=relatorio.pdf");
try {
ServletOutputStream servletOutputStream = response.getOutputStream();
//envia o título para o relatório, usando o parâmetro criado
Map<String, String> parametros = new HashMap<String, String>();
parametros.put("fornecimento", "xxxx");
List dados = new ArrayList();
Map record = null;
//varre a consulta e separa os objetos
for (Iterator iterator = todosResultsPesq().iterator();
iterator.hasNext();) {
Object[] o = (Object[]) iterator.next();
record = new HashMap();
//coloca em um Map cada um dos campos criados
//manualmente pelo relatório
record.put("fornecimento", o[0].toString());
record.put("isrisco", Boolean.parseBoolean(o[1].toString()));
record.put("endereco_entrega", o[2].toString());
record.put("nome_cliente", o[3].toString());
record.put("endereco", o[4].toString());
record.put("bairro", o[5].toString());
record.put("cidade", o[6].toString());
record.put("cep", o[7].toString());
record.put("observacao_entrega", o[8].toString());
record.put("num_notafiscal", Integer.parseInt(o[9].toString()));
record.put("data_nf", this.convertTimestamp(o[10].toString()));
//adiciona o List dados
dados.add(record);
}
//cria uma fonte de dados para cole��es
JRBeanCollectionDataSource fonteDados = new JRBeanCollectionDataSource(dados);
//envia para o navegador o PDF gerado
JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parametros, fonteDados);
// JasperFillManager.fillReportToStream(reportStream, servletOutputStream,record);
// JasperPrint print = JasperFillManager.fillReport(reportStream, parametros, fonteDados);
// JasperPrintManager.printPage(print, 0, false);
servletOutputStream.flush();
servletOutputStream.close();
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
//evita erro do JSF após completar
//a geração do relatório
//avisando o FacesContext que a resposta está completa
context.responseComplete();
}
}
// getters e setters omitidos
}
Victor Lima
Curtir tópico
+ 0
Responder
Posts
14/01/2010
Dyego Carmo
Para invocar uma aplicação desktop de dentro de uma pagina web utilize o JAva Web Start:
Mais informacoes:
http://www.guj.com.br/content/articles/jws/jws.pdf
Mais informacoes:
http://www.guj.com.br/content/articles/jws/jws.pdf
Responder
Clique aqui para fazer login e interagir na Comunidade :)