设为首页 收藏本站
查看: 844|回复: 0

[经验分享] CVSPROTO_JSF_MyBatis_项目总结

[复制链接]

尚未签到

发表于 2016-11-26 08:41:07 | 显示全部楼层 |阅读模式
公司的项目已接近尾声,时间长了,很多东西都忘了……

我脑子不好使,在此重新搭建一个项目作为复习,顺便边学习JQuery Mobile

本项目使用JSF+ibatis搭建,不同的设备使用不同的css……其他的忘了,郁闷中




我是先在QQ邮箱记事本写,再拷过来的,图片显示不了,懒得搞了.....




一、环境搭建

 新建项目


<script type="text/javascript" src="../script/common/jquery.alerts.js"></script>
<!-- 公共CSS文件 -->
<link rel="stylesheet" href="../css/common/jquery.alerts.css" type="text/css" />
</head>
<body>
<f:view> <%-- JSF的标签要写在<f:view>里面 --%>
<h:form id="pintr001Form" >
账号:
<h:inputText id="username" styleClass="" accesskey="u" value="请输入账号" ></h:inputText>
<br/>
密码:
<h:inputSecret id="password" styleClass="" accesskey="p" value="" ></h:inputSecret>
<br/>
<h:commandButton id="submit" value="提交" ></h:commandButton>
</h:form>
</f:view>
</body>
</html>
 



页面效果:


<script type="text/javascript" src="../script/common/jquery.alerts.js"></script>
<!-- 公共CSS文件 -->
<link rel="stylesheet" href="../css/common/jquery.alerts.css" type="text/css" />
</head>
<body>
<f:view> <%-- JSF的标签要写在<f:view>里面 --%>
<h:form id="pintr001Form" >
账号:
<h:inputText id="username" styleClass="" accesskey="u" value="#{PINTR001Form.username }" ></h:inputText>
<br/>
密码:
<h:inputSecret id="password" styleClass="" accesskey="p" value="#{PINTR001Form.password }" ></h:inputSecret>
<br/>
<h:commandButton id="submit" value="提交" ></h:commandButton>
</h:form>
</f:view>
</body>
</html>
 



页面效果:



现在点击"提交",页面只是刷新了一下,因为还没给form指定action,它不知道做啥反应……



4. 添加事件

这里把事件放在一个独立的Bean中, 

package li.kang.wang.badan.intr.pintr001.pr.event;
import li.kang.wang.badan.intr.pintr001.pr.form.PINTR001Form;
/** PINTR001页面Event */
public class PINTR001Event {
/* 用来保存表单数据 */
private PINTR001Form pintr001Form;
/**
* @return the pintr001Form
*/
public PINTR001Form getPintr001Form() {
return pintr001Form;
}
/**
* @param pintr001Form the pintr001Form to set
*/
public void setPintr001Form(PINTR001Form pintr001Form) {
this.pintr001Form = pintr001Form;
}
/**
* 登录验证
* @return
*/
public String checkUser() {
System.out.println("checkUser:\n "
+ "username: " + pintr001Form.getUsername() + "\n"
+ "password: " + pintr001Form.getPassword());
if (pintr001Form.getUsername().equals("wkl") && pintr001Form.getPassword().equals("wkl")) {
return "loginSuccess";
}
return "loginError";
}
}
 




5. 在faces-config.xml注册事件Bean

<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<!-- Home -->
<managed-bean>
<managed-bean-name>PINTR001Form</managed-bean-name>
<managed-bean-class>li.kang.wang.badan.intr.pintr001.pr.form.PINTR001Form</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>PINtr001Event</managed-bean-name>
<managed-bean-class>li.kang.wang.badan.intr.pintr001.pr.event.PINTR001Event</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>pintr001Form</property-name>   <!-- 这是PINTR001Event.java中的属性 -->
<property-class>li.kang.wang.badan.intr.pintr001.pr.form.PINTR001Form</property-class>
<value>#{PINTR001Form}</value>                       <!-- 绑定了PINTR001Form的值,才能取得表单数据 -->
</managed-property>  
</managed-bean>
</faces-config>
 



6. jsp页面绑定action事件

action事件是一个public型返回值为Object(一般为String)的无参函数



actionListener:其响应方法可以有返回值,也可以无返回值,有返回值时,不能通过返回值控制页面的跳转,页面始终在当前视图。其响应方法的参数必须为 javax.faces.event.ActionEvent 类型,否者报错(响应方法找不到)。






详细说明:(引用自: 
http://hintcnuie.iyunv.com/blog/135593
)



        action()处理的是业务逻辑.实际上JSF会自动产生一个"预设的ActionListener"来处理事件,并根据其返回值决定页面跳转.
第五阶段:调用应用
执行,    会影响到页面间的导航(navigation)。主要处理一些业务逻辑并返回几个业务逻辑结果(String类型),JSF的导航系统将会根据这个来选择恰当的下一个页面. 会提交表单.

       actionListener(ActionEvent e)处理页面上组件的"监听事件".
第五阶段:调用应用
执行,  不会影响到导航.主要操作当前页面内的组件,或者是进行一些业务模型上的改变,或者是修改backing bean(托管Bean)的属性等,并不会出现在页面间的跳转。会提交表单. 

         valueChangeListener(ValueChangeEvent event)处理页面上组件值变化的"监听事件",
"第三阶段:验证请求值"
执行 

 注意:

      ActionListener (事件监听器)是用于解决只影响用户界面的事件 ,    特别地,在beans的form数据被加载和触发验证前被调用 , 用immediate=“true”指明这个行为不触发验证 , 在监听器调用后,会重新显示表单 , 不应用导航规则,不重定向页面 

   Action   隶属于按钮、超链接和图形映射控件,自动提交对应表单 。

   ValueChangeListener    隶属于单选框、组合框、列表框、复选框、文本框等控件,需要用onclick=“submit()”或onchange=“submit()”的方式提交表单






此处,我用action,绑定checkUser()函数



7. 编辑页面跳转规则


checkUser()中,我定义如果用户名和密码符合要求,就返回"loginSuccess",跳转PINTR002.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>成功登录</title>
</head>
<body>
rigth!
</body>
</html>
 



否则返回"loginError",跳转PINTR003.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录失败</title>
</head>
<body>
error!
</body>
</html>
 



JSF会根据Action事件的函数返回值,在faces-config.xml寻找匹配的配置来决定跳转方向:

在faces-config.xml跳转规则:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<!-- Home -->
<managed-bean>
<managed-bean-name>PINTR001Form</managed-bean-name>
<managed-bean-class>li.kang.wang.badan.intr.pintr001.pr.form.PINTR001Form</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>PINtr001Event</managed-bean-name>
<managed-bean-class>li.kang.wang.badan.intr.pintr001.pr.event.PINTR001Event</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>pintr001Form</property-name>  <!-- 这是PINTR001Event.java中的属性 -->
<property-class>li.kang.wang.badan.intr.pintr001.pr.form.PINTR001Form</property-class>
<value>#{PINTR001Form}</value>  <!-- 绑定了PINTR001Form的值,才能取得表单数据 -->
</managed-property>  
</managed-bean>
<!-- Home -->
<!-- 这里容易根据字面意思理解 -->
<navigation-rule>
<description>八丹Android应用主页</description>
<display-name>八丹Android应用主页</display-name>
<from-view-id>/INTR/PINTR001.jsp</from-view-id>   
<navigation-case>
<from-outcome>home</from-outcome>
<to-view-id>/INTR/PINTR001.jsp</to-view-id>
<redirect/> <!-- 重定向, 不填的话地址栏是上一个页面的地址 -->
</navigation-case>
<navigation-case>
<from-outcome>loginSuccess</from-outcome>
<to-view-id>/INTR/PINTR002.jsp</to-view-id>
<redirect/>
</navigation-case>
<navigation-case>
<from-outcome>loginError</from-outcome>
<to-view-id>/INTR/PINTR003.jsp</to-view-id>
<redirect/>
</navigation-case>
</faces-config>

 





点击"提交"后, PINTR001Event先取得pintr001Form绑定好的表单



然后执行action指定的事件函数:



账号密码不符合, 跳转PINTR003.jsp



如果填的是:



则跳转PINTR002.jsp



四、log4j XML配置 (参考http://sun-cat.iyunv.com/blog/38736)




log4j在初始化的时候 会先在classpath中寻找 log4j.porperties,当找不到该文件时,会接着寻找log4j.xml

研究了一下xml配置文件的书写方式,提供一个样例,具体的可以参考 log4j.dtd

通过<logger></logger>的定义可以将各个包中的类日志输出到不同的日志文件中


 以下是完整的log4j.xml :

 

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<!-- CONSOLE -->
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy/MM/dd HH:mm:ss} %-5p [%c{1}] - %m%n" />
</layout>
</appender>
<!-- INFO -->
<appender name="INFO" class="org.apache.log4j.FileAppender">
<param name="File" value="f:/logs/badan/application.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy/mm/dd} %p:%r:%c:%m%n" />
</layout>
</appender>
<!-- ERROR -->
<appender name="ERROR"
class="org.apache.log4j.DailyRollingFileAppender">
<param name="Threshold" value="error" />
<param name="File" value="f:/logs/badan/error.log" />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy/MM/dd HH:mm:ss} %-5p [%c] - %m%n" />
</layout>
</appender>
<!-- DEBUG -->
<appender name="DEBUG"
class="org.apache.log4j.DailyRollingFileAppender">
<param name="Threshold" value="debug" />
<param name="File" value="f:/logs/badan/debug.log" />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy/MM/dd HH:mm:ss} %-5p [%c] - %m%n" />
</layout>
</appender>
<logger name="org.apache">
<level value="warn" />
<appender-ref ref="DEBUG" />
<appender-ref ref="INFO" />
<appender-ref ref="ERROR" />
</logger>
<logger name="java.sql">
<level value="warn" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG" />
<appender-ref ref="INFO" />
<appender-ref ref="ERROR" />
</logger>
<logger name="li.kang.wang.badan">
<level value="debug" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG" />
<appender-ref ref="INFO" />
<appender-ref ref="ERROR" />
</logger>
</log4j:configuration>
 
最后要把log4j.xml的路径加项目的Java Build Path中,即classpath,

这个让我折腾了很久,一直说报警告郁闷啊!

log4j:WARN No appenders could be found for logger (li.kang.wang.badan.intr.pintr001.pr.event.PINTR001Event).

log4j:WARN Please initialize the log4j system properly.

log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.




















接来下可以在java代码中使用log4j了

package li.kang.wang.badan.intr.pintr001.pr.event;
import li.kang.wang.badan.intr.pintr001.pr.form.PINTR001Form;
import org.apache.log4j.Logger;
/** PINTR001页面Event */
public class PINTR001Event {
private static Logger log = Logger.getLogger(PINTR001Event.class.getName());
private PINTR001Form pintr001Form;
/**
* @return the pintr001Form
*/
public PINTR001Form getPintr001Form() {
return pintr001Form;
}
/**
* @param pintr001Form
*            the pintr001Form to set
*/
public void setPintr001Form(PINTR001Form pintr001Form) {
this.pintr001Form = pintr001Form;
}
/**
* 登录验证
*
* @return
*/
public String checkUser() {
log.debug("checkUser:\n" + "username: " + pintr001Form.getUsername()
+ "\n" + "password: " + pintr001Form.getPassword());

if (pintr001Form.getUsername().equals("wkl")
&& pintr001Form.getPassword().equals("wkl")) {
return "loginSuccess";
}
return "loginError";
}
}
 



运行效果:

控制台输出:



日志文件输出






五、Ibatis集成

1. 导入mybatis-2.3.5.jar



2. 编辑ibatis配置文件



3. SqlMapConfig.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<!-- Always ensure to use the correct XML header as above! -->
<sqlMapConfig>
<!--
The properties (name=value) in the file specified here can be used
placeholders in this config file (e.g. “${driver}”. The file is usually relative
to the classpath and is optional.
-->
  <properties resource="ibatis/resources/SqlMapConfig.properties" />
<!--
These settings control SqlMap configuration details, primarily to do
with transaction management. They are all optional (see the Developer Guide
for more).
-->
<settings
cacheModelsEnabled="true"    enhancementEnabled="true"    lazyLoadingEnabled="true"   
maxRequests="32"    maxSessions="10"    maxTransactions="5"    useStatementNamespaces="true" />
<!--
Configure a datasource to use with this SQL Map using SimpleDataSource.
Notice the use of the properties from the above resource
-->
<transactionManager type="JDBC" >
<dataSource type="SIMPLE" >
<property        name="JDBC.Driver"             value="${driver}" />
<property        name="JDBC.ConnectionURL"      value="${url}" />
<property        name="JDBC.Username"           value="${username}" />
<property        name="JDBC.Password"           value="${password}" />
<property        name="JDBC.DefaultAutoCommit"  value="#{defaultautocommit}" />
</dataSource>
</transactionManager>
<!--
Identify all SQL Map XML files to be loaded by this SQL map. Notice
the paths are relative to the classpath.
-->
<!-- 稍后添加 -->
<sqlMap resource="/li/kang/wang/badan/intr/pintr001/db/sql/PINTR001SqlMap.xml" />
</sqlMapConfig>
 



SqlMapConfig.xml引用的配置SqlMapConfig.properties:

# This is just a simple properties file that simplifies automated configuration
# of the SQL Maps configuration file (e.g. by Ant builds or continuous
# integration tools for different environments\u2026 etc.)
# These values can be used in any property value in the file above (e.g. \u201c${driver}\u201d)
# Using a properties file such as this is completely optional.
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.1.116:3306/badan
username=wkl
password=wkl
defaultautocommit=false
 



4. 编写数据库公共实例类






// SqlConfig.java

package li.kang.wang.badan.common;
import java.io.IOException;
import java.io.Reader;
import java.nio.charset.Charset;
import org.apache.log4j.Logger;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
/**
* 系统公共SqlMap配置
*/
public class SqlConfig {
/** sqlMap instance */
private static SqlMapClient sqlMap;
/** Log */
private static Logger log = Logger.getLogger(SqlConfig.class.getName());
/** 静态代码块优先执行 */
static {
Reader reader = null;
try {
String resource = "ibatis/resources/SqlMapConfig.xml";
Resources.setCharset(Charset.forName("UTF-8"));
reader = Resources.getResourceAsReader(resource);
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (Exception e) {
log.error("SqlMapConfig.xml连接异常");
log.error(e);
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
log.error("SqlMapConfig.xml连接异常");
log.error(e);
}
}
}
}
/**
* SqlMap实例取得
* @return SqlMapClient
*/
public static SqlMapClient getSqlMapInstance() {
return sqlMap;
}
}

 



5. 准备数据库表

创建数据库badan

再创建表user

-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(20) NOT NULL auto_increment,
`username` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'wkl', 'wkl');
INSERT INTO `user` VALUES ('2', 'ok', 'ok');
 



6. 编写DB层Java代码

6.1 编写DTO JavaBean 

DTO是Data Transfer Object(数据传输对象), 用来"缓存"数据库数据






package li.kang.wang.badan.intr.pintr001.db.dto;
import java.io.Serializable;
/** 数据库表绑定Java Bean */
public class UserInfo implements Serializable{
/**
* serialVersionUID
*/
private static final long serialVersionUID = 1646885493639314417L;
/** 账号 */
private String username;
/** 密码 */
private String password;
/**
* @return the username
*/
public String getUsername() {
return username;
}
/**
* @param username the username to set
*/
public void setUsername(String username) {
this.username = username;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
}
}
 



6.2 配置INTR模块的SqlMap

// PINTR001SqlMap.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="PINTR001" >
<resultMap
id="ResultMap01"
class="li.kang.wang.badan.intr.pintr001.db.dto.UserInfo" > <!-- 绑定DTO JavaBean -->
<result
column="username"      javaType="string"      jdbcType="VARCHAR"      property="username" />
<result
column="password"      javaType="string"      jdbcType="VARCHAR"      property="password" />
</resultMap>
<!-- 选择用户信息 -->
<select
id="getUserInfo"
parameterClass="li.kang.wang.badan.intr.pintr001.db.dto.UserInfo"
resultMap="ResultMap01" >
SELECT
username, password
FROM
user
WHERE username = #username:VARCHAR#
AND password = #password:VARCHAR#
</select>
</sqlMap>
 



在ibatis.resources.SqlMapConfig.xml中引用PINTR001SqlMap.xml

添加   <sqlMap resource="/li/kang/wang/badan/intr/pintr001/db/sql/PINTR001SqlMap.xml" />

至此,DB层配置完了




7. 编写AP层

7.1 Event函数通过LogicBean操作数据库

在中:

package li.kang.wang.badan.intr.pintr001.pr.event;
import li.kang.wang.badan.intr.pintr001.ap.data.ContextData;
import li.kang.wang.badan.intr.pintr001.ap.logicbean.ISelectLogicBean;
import li.kang.wang.badan.intr.pintr001.pr.form.PINTR001Form;
import org.apache.log4j.Logger;
/** PINTR001页面Event */
public class PINTR001Event {
private static Logger log = Logger.getLogger(PINTR001Event.class.getName());
private PINTR001Form pintr001Form;
// 通过接口, 可以从faces-config.xml指定pintr001SelectLogicBean对应某个实际的值(实现类)
private ISelectLogicBean pintr001SelectLogicBean;
/**
* @return the pintr001Form
*/
public PINTR001Form getPintr001Form() {
return pintr001Form;
}
/**
* @param pintr001Form
*            the pintr001Form to set
*/
public void setPintr001Form(PINTR001Form pintr001Form) {
this.pintr001Form = pintr001Form;
}
/**
* @return the pintr001SelectLogicBean
*/
public ISelectLogicBean getPintr001SelectLogicBean() {
return pintr001SelectLogicBean;
}
/**
* @param pintr001SelectLogicBean the pintr001SelectLogicBean to set
*/
public void setPintr001SelectLogicBean(ISelectLogicBean pintr001SelectLogicBean) {
this.pintr001SelectLogicBean = pintr001SelectLogicBean;
}
/**
* 登录验证
*
* @return
*/
public String checkUser() {
ContextData contextData = new ContextData();        
log.debug("checkUser:\n"
+ "username: " + pintr001Form.getUsername()
+ "\n" + "password: " + pintr001Form.getPassword());
// 通过LogicBean查询数据库
contextData.setUsername(pintr001Form.getUsername());
contextData.setPassword(pintr001Form.getPassword());
if(pintr001SelectLogicBean.checkUserInfo(contextData)){
return "loginSuccess";
}
return "loginError";
}
}
 



7.2 编写查询条件JavaBean和查询结果JavaBean

ContextData.java用来保存各个页面之间传递的参数和SQL查询条件






SelectResultData.java用来保存查询结果

package li.kang.wang.badan.intr.pintr001.ap.data;
import java.util.List;
/** 保存数据库查询结果 */
public class SelectResultData {
/** 查询结果List */
private List<ListContextData> list;
/**
* @return the list
*/
public List<ListContextData> getList() {
return list;
}
/**
* @param list the list to set
*/
public void setList(List<ListContextData> list) {
this.list = list;
}
}
 



ListContextData.java 用于存储多条记录常用表格显示,如XX产品一览 

package li.kang.wang.badan.intr.pintr001.ap.data;
/** 用于存储多条记录常用表格显示,如用户一览 */
public class ListContextData {
/** ID */
private int userId;
/** 账号 */
private String username;
/** 密码 */
private String password;
/**
* @return the userId
*/
public int getUserId() {
return userId;
}
/**
* @param userId the userId to set
*/
public void setUserId(int userId) {
this.userId = userId;
}
/**
* @return the username
*/
public String getUsername() {
return username;
}
/**
* @param username the username to set
*/
public void setUsername(String username) {
this.username = username;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
}
}

 



7.3 编写LogicBean






// ISelectLogicBean.java

package li.kang.wang.badan.intr.pintr001.ap.logicbean;
import li.kang.wang.badan.intr.pintr001.ap.data.ContextData;
import li.kang.wang.badan.intr.pintr001.ap.data.SelectResultData;
/** ISelectLogicBean接口 */
public interface ISelectLogicBean {
/**
* 查询用户信息
*/
public SelectResultData getUserList();
/**
* 验证用户信息
*/
public boolean checkUserInfo(ContextData contextData);
}







// SelectLogicBean.java

package li.kang.wang.badan.intr.pintr001.ap.logicbean;
import li.kang.wang.badan.common.SqlConfig;
import li.kang.wang.badan.intr.pintr001.ap.data.ContextData;
import li.kang.wang.badan.intr.pintr001.ap.data.SelectResultData;
import li.kang.wang.badan.intr.pintr001.db.dto.UserInfo;
import org.apache.log4j.Logger;
import com.ibatis.sqlmap.client.SqlMapClient;
/** SelectLogicBean实现类 */
public class SelectLogicBean implements ISelectLogicBean {
private static Logger log = Logger.getLogger(SelectLogicBean.class
.getName());
@Override
/**
* 查询用户信息
*/
public SelectResultData getUserList() {
return null;
}
@Override
/**
* 验证用户信息
*/
public boolean checkUserInfo(ContextData contextData) {
/** 取得sqlMap实例 */
SqlMapClient sqlMap = SqlConfig.getSqlMapInstance();
try {
// 事务开始
sqlMap.startTransaction();
//
UserInfo userInfo = new UserInfo();
userInfo.setUsername(contextData.getUsername());
userInfo.setPassword(contextData.getPassword());
Object queryResult = sqlMap.queryForObject("PINTR001.getUserInfo", userInfo);
sqlMap.commitTransaction();
if (queryResult != null){
return true;
}
} catch (Exception e) {
log.error(e.getMessage());
}finally{
try {
sqlMap.endTransaction();
} catch (Exception e) {
}
}
return false;
}
}
 



7.4 注册LogicBean到faces-config.xml

红色字体部分是新增的




<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<!-- Home -->
<managed-bean>
<managed-bean-name>PINTR001Form</managed-bean-name>
<managed-bean-class>li.kang.wang.badan.intr.pintr001.pr.form.PINTR001Form</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>PINTR001SelectLogicBean</managed-bean-name>
<managed-bean-class>li.kang.wang.badan.intr.pintr001.ap.logicbean.SelectLogicBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>

<managed-bean>
<managed-bean-name>PINtr001Event</managed-bean-name>
<managed-bean-class>li.kang.wang.badan.intr.pintr001.pr.event.PINTR001Event</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>pintr001Form</property-name>  <!-- 这是PINTR001Event.java中的属性 -->
<property-class>li.kang.wang.badan.intr.pintr001.pr.form.PINTR001Form</property-class>
<value>#{PINTR001Form}</value>  <!-- 绑定了PINTR001Form的值,才能取得表单数据 -->
</managed-property>
<managed-property>
<property-name>pintr001SelectLogicBean</property-name>
<property-class>li.kang.wang.badan.intr.pintr001.ap.logicbean.ISelectLogicBean</property-class>
<value>#{PINTR001SelectLogicBean}</value>
</managed-property>

</managed-bean>
<!-- Home -->
<navigation-rule>
<description>八丹Android应用主页</description>
<display-name>八丹Android应用主页</display-name>
<from-view-id>/INTR/PINTR001.jsp</from-view-id>   
<navigation-case>
<from-outcome>home</from-outcome>
<to-view-id>/INTR/PINTR001.jsp</to-view-id>
<redirect/>
</navigation-case>
<navigation-case>
<from-outcome>loginSuccess</from-outcome>
<to-view-id>/INTR/PINTR002.jsp</to-view-id>
<redirect/>
</navigation-case>
<navigation-case>
<from-outcome>loginError</from-outcome>
<to-view-id>/INTR/PINTR003.jsp</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
</faces-config>
 

8. 运行验证

首先给表增加一条记录








运行结果:



然后更改用户名为








运行结果:



运行记录Log:








去耍了,过几天再写了,(*^__^*) 嘻嘻……

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-305676-1-1.html 上篇帖子: mybatis动态sql设置 下篇帖子: mybatis中select语句字段大小写
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表