primefaces

在这一部分中,我将继续演示JSF,Guice和MyBatis的集成。 在持久层中使用DBCP连接池和MYSQL数据库。 看一下第1部分 。

在上一篇文章中 ,我们创建了一个ServletContextListener。 现在,我们只需要在contextInitialized方法中绑定BasicDataSourceProvider和JdbcTransactionFactory。

GuiceContextListener.java

package org.borislam;import java.util.Properties;import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.apache.log4j.xml.DOMConfigurator;
import org.borislam.mapper.StaffMapper;
import org.borislam.service.SimpleService;
import org.borislam.service.impl.SimpleServiceImpl;
import org.mybatis.guice.MyBatisModule;
import org.mybatis.guice.datasource.dbcp.BasicDataSourceProvider;
import org.mybatis.guice.datasource.helper.JdbcHelper;import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Singleton;
import com.google.inject.name.Names;public class GuiceContextListener implements ServletContextListener {public void contextDestroyed(ServletContextEvent servletContextEvent) {ServletContext servletContext = servletContextEvent.getServletContext();servletContext.removeAttribute(Injector.class.getName());}public void contextInitialized(ServletContextEvent servletContextEvent) {Injector injector = Guice.createInjector(new MyBatisModule() {@Overrideprotected void initialize() {         install(JdbcHelper.MySQL);environmentId('development');bindDataSourceProviderType(BasicDataSourceProvider.class);bindTransactionFactoryType(JdbcTransactionFactory.class);Names.bindProperties(binder(), createServerProperties());//add singleton service classbind(SimpleService.class).to(SimpleServiceImpl.class).in(Singleton.class); //add MyBatis Service classaddMapperClass(StaffMapper.class);}});ServletContext servletContext = servletContextEvent.getServletContext();servletContext.setAttribute(Injector.class.getName(), injector);//log4JDOMConfigurator.configure(Thread.currentThread().getContextClassLoader().getResource('log4j.xml'));}protected static Properties createServerProperties() {Properties myBatisProperties = new Properties();myBatisProperties.setProperty('JDBC.host', 'localhost');myBatisProperties.setProperty('JDBC.port', '3306');myBatisProperties.setProperty('JDBC.schema', 'ttcoach');myBatisProperties.setProperty('JDBC.username', 'root');myBatisProperties.setProperty('JDBC.password', '');myBatisProperties.setProperty('JDBC.autoCommit', 'false');return myBatisProperties;}}

Staff.java

package org.borislam.model;public class Staff {private String code;private String name;private String sex;private String tel;public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;} }

StaffMapper.java

package org.borislam.mapper;import java.util.List;import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.borislam.model.Staff;public interface StaffMapper {final String SELECT_ALL = 'SELECT * FROM FREELANCER';final String SELECT_BY_CODE = 'SELECT * FROM FREELANCER WHERE CODE = #{code}';/*** Returns the list of all Freelancer instances from the database.* @return the list of all Freelancer instances from the database.*/@Select(SELECT_ALL)@Results(value = {@Result(property='code', column='code'),@Result(property='name', column='name'),@Result(property='sex', column='sex'),@Result(property='tel', column='tel')})List<Staff> selectAll();/*** Returns a Freelancer instance from the database.* @param id primary key value used for lookup.* @return A Freelancer instance with a primary key value equals to pk. null if there is no matching row.*/@Select(SELECT_BY_CODE)@Results(value = {@Result(property='code', column='code'),@Result(property='name', column='name'),@Result(property='sex', column='sex'),@Result(property='tel', column='tel')})Staff selectByCode(String code);
}

SimpleService.java

package org.borislam.service;public interface SimpleService {public void doSimpleThing();
}

SimpleServiceImpl.java

package org.borislam.service.impl;import java.util.List;import org.borislam.mapper.StaffMapper;
import org.borislam.model.Staff;
import org.borislam.service.SimpleService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import com.google.inject.Inject;public class SimpleServiceImpl implements SimpleService {private StaffMapper staffMapper;Logger logger = LoggerFactory.getLogger(this.getClass());@Injectpublic void setStaffMapper(StaffMapper staffMapper) {this.staffMapper = staffMapper;}public void doSimpleThing() {List<Staff> staffList = staffMapper.selectAll();logger.debug('size 1: ' + staffList.size());Staff staff = staffMapper.selectByCode('c001');logger.debug('Code1 : ' + staff.getCode());logger.debug('Name 1: ' + staff.getName());;}
}

TestBean.java

package org.borislam.view;import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.inject.Inject;
import org.borislam.service.SimpleService;
import org.borislam.service.TestService;@ManagedBean
@SessionScoped
public class TestBean extends BasePageBean {private SimpleService sService;@Injectpublic void setsService(SimpleService sService) {this.sService = sService;}public String doTest(){System.out.println('test 1 inside backing bean...');sService.doSimpleThing();return '';}public String doTest2(){System.out.println('test 2 inside backing bean...');sService.doSimpleThing();return '';}
}

index.xhtml

<html xmlns='http://www.w3c.org/1999/xhtml'
xmlns:h='http://java.sun.com/jsf/html'
xmlns:p='http://primefaces.org/ui'>
<h:head>
<style>
.ui-widget, .ui-widget .ui-widget {
font-size: 80% !important;
}
</style>
</h:head>
<h:body>
<h:form><h:outputText value='#{msg['website.title']}' /><p:calendar id='popupButtonCal' showOn='button' /><p:commandButton value='TEST2' action='#{testBean.doTest}'/><p:editor/><br/>
</h:form>
</h:body>
</html>

大功告成! 现在,您可以准备基于此框架编写JSF应用程序。
参考: 轻量级Web应用程序框架: Programming Peaceally博客中的JCG合作伙伴 Boris Lam的PrimeFaces(JSF)+ Guice + MyBatis(PART 2) 。

翻译自: https://www.javacodegeeks.com/2013/01/lightweight-web-application-framework-primefaces-jsf-guice-mybatis-part-2.html

primefaces

primefaces_轻量级Web应用程序框架:PrimeFaces(JSF)+ Guice + MyBatis(第2部分)相关推荐

  1. primefaces_轻量级Web应用程序:PrimeFaces(JSF)+ Guice + MyBatis(第1部分)

    primefaces 最近,我的朋友问我如何构建轻量级的Java Web应用程序. 许多Java Web开发人员会选择Spring和Hibernate来构建传统的Web应用程序. 但是,它可能不够轻巧 ...

  2. 轻量级Web应用程序框架:PrimeFaces(JSF)+ Guice + MyBatis(第2部分)

    在这一部分中,我将继续演示JSF,Guice和MyBatis的集成. 在持久层中使用DBCP连接池和MYSQL数据库. 看一下第1部分 . 在上一篇文章中 ,我们创建了一个ServletContext ...

  3. 轻量级Web应用程序:PrimeFaces(JSF)+ Guice + MyBatis(第1部分)

    最近,我的朋友问我如何构建轻量级的Java Web应用程序. 许多Java Web开发人员会选择Spring和Hibernate来构建传统的Web应用程序. 但是,它可能不够轻巧. 我建议他尝试使用G ...

  4. dancer.js_与轻量级的Perl Web应用程序框架Dancer一起旋转

    dancer.js Dancer是Perl的轻量级Web应用程序框架,其灵感来自Ruby中的Sinatra框架 . Dancer自称简单灵活,但功能强大到足以运行您可以想到的大多数Web应用程序. 一 ...

  5. ASP.NET Core开源Web应用程序框架ABP

    "作为面向服务架构(SOA)的一个变体,微服务是一种将应用程序分解成松散耦合服务的新型架构风格. 通过细粒度的服务和轻量级的协议,微服务提供了更多的模块化,使应用程序更容易理解,开发,测试, ...

  6. 卡布奇诺搭建教程_移动Web应用程序框架匹配,第2部分,探索卡布奇诺咖啡以进行移动Web应用程序开发

    卡布奇诺搭建教程 存档日期:2019年5月17日 | 首次发布:2010年11月23日 Web应用程序已经取代了桌面应用程序很多年了,尽管事实上它们的质量通常低于桌面应用程序. 这种差异的部分原因是台 ...

  7. Django Python Web应用程序框架简介

    在这个由四部分组成的系列文章的前三篇文章中,比较了不同的Python Web框架,我们介绍了Pyramid , Flask和Tornado Web框架. 我们已经构建了同一个应用程序3次,最终进入了D ...

  8. Seam - 无缝集成 JSF,第 1 部分: 为 JSF 量身定做的应用程序框架

    Seam - 无缝集成 JSF,第 1 部分: 为 JSF 量身定做的应用程序框架 发现 Seam 对 JSF 生命周期特有的增强 文档选项 未显示需要 JavaScript 的文档选项 打印本页 将 ...

  9. Java Portlet 工具:将 Java Web 应用程序转换为自适型 Portlet--page1

    Java Portlet 工具:将 Java Web 应用程序转换为自适型 Portlet 作者 Andrew Lorek 05/30/2006 译者: 墩子 摘要 这篇文章介绍了如何将工作于门户以外 ...

最新文章

  1. Hibernate框架第二天
  2. 判断js中的数据类型的几种方法
  3. 送给 Java 程序员的 Spring 学习指南
  4. 《30天自制操作系统》笔记(04)——显示器256色
  5. 魔力宝贝 服务器状态,魔力宝贝服务端standenemy的参数
  6. win10命令提示符怎么打开_Win10系统防火墙怎么打开?ARP防火墙启用步骤
  7. 第十篇:Spring Boot整合mybatis+Mysql 入门试炼02
  8. qt android程序联网死机,Qt for Android(九) ——APP 崩溃卡死拉起保活实战
  9. 信息学奥赛一本通C++语言——1059:求平均年龄
  10. 高流量站点NGINX与PHP-fpm配置优化
  11. SQL系统教程一(表之间的连接关系)
  12. mysql5.5.17源代码安装
  13. spring整合redis问题
  14. RH413-GRUB加密
  15. ucos信号量集源码分析
  16. Garmin NUVI C255 固件刷机教程
  17. linux mencoder 安装,Mencoder与X264安装
  18. Ado.Net SQL语句参数化(SqlParameter用法)(多条件模糊查询的实现)
  19. 字符编码Unicode原理
  20. word2013自动生成目录的时候,如何调整目录格式?

热门文章

  1. 谈谈 Java 的克隆
  2. Oracle入门(十二D)之表删除与删除表数据
  3. uni-app打包h5
  4. win10操作技巧介绍,很实用!
  5. Python缩进的几个原则
  6. React中的this指向问题
  7. win10打字突然变成繁体
  8. java流与文件——内存映射文件
  9. apache lucene_Apache Lucene中的并发查询执行
  10. 将json绑定为对象_了解自定义对象创建:JSON绑定概述系列