这是一个jsf框架+hibernate 的一个案例,介绍我对jsf的理解。
jsf框架是一个目标很明确的框架,具有自我的页面标签,他与后台bean紧密结合使用bean的变量和方法来操作页面,在加载页面时会加载页面所指定的bean以及变量和方法,将其创建出来,所以一般在list页面和view页面时的传值都和bean紧密结合,
JSF请求过程中不需要通过request等变量获取值,它将浏览器端的页面变量与服务端的java对象对应起来了,依靠事件驱动完成请求。程序员使用JSF再也不用关心如何在给后台传值如何在界面取值了。直接在界面中使用由数据的ManagedBean就行了。
例如:
package com.biz.xm;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.servlet.http.HttpServletRequest;
import common.entities.environmentmanage.TeamOil;
import common.entities.xinshengchandongtai.Shigong;
import common.entities.xm.USERSS;
import common.hb3utils.HbQF;
import common.utils.GuidGenerator;
import common.web.jsf.DataPage;
import common.web.jsf.ManyCheckBoxUtil;
import common.web.jsf.PagedListDataModel;
/**
* 这是一个userbean
* @author Administrator
*
*/
public class UserBean {
private String username;
private String password;
public UserBean() {
//因为jsf是加载页面先加载bean的所以在点击修改时传递参数我们可以正在构造里面接受被操作
HttpServletRequest req = (HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext().getRequest();
String id =req.getParameter("editId");
System.out.println(id);
//编辑页面时ID有值
if(id!=null&& !id.equals("")){
userDemo=(USERSS) HbQF.getInstance().getObjectById(USERSS.class, id);
}
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "UserBean [username=" + username + ", password=" + password + ", userDemo=" + userDemo + "]";
}
/**
*注入实体类
*/
private USERSS userDemo=new USERSS();
public USERSS getUserDemo() {
return userDemo;
}
public void setUserDemo(USERSS userDemo) {
this.userDemo = userDemo;
}
/**
*物理 删除数据
*/
public void getDel(ActionEvent a) {
//获取id
List<String> ids = ManyCheckBoxUtil.tableManyCheckBox("items");
for (String id : ids) {
System.out.println(id);
HbQF.getInstance().deleteObject(USERSS.class, id);
}
reset();
}
public void save1(ActionEvent a) {
//保存存数据
HbQF.getInstance().save(userDemo);
this.reset();
}
/**
* 保存数据
* @param userDemo
*
*/
public void save(ActionEvent a) {
String id=GuidGenerator.getRandNum();
userDemo.setPassword(password);
userDemo.setId(id);
userDemo.setUsername(username);
System.out.println(userDemo.getPassword()+userDemo.getUsername());
//保存存数据
HbQF.getInstance().save(userDemo);
this.reset();
}
public void reset() {
userDemo = null;
}
/**
* 查询所有user数据 不带分页
* @return
* ActionEvent e
*/
public List<USERSS> getFindAll(){
String sql="from USERSS ";
List<USERSS> list= HbQF.getInstance().getListByQuery(sql);
System.out.println(list.get(0).getId());
return list;
}
/**
* 删除数据
* delete from USERSS where id=#{id}
*/
public void getObjectById(){
//获取id值
HttpServletRequest req = (HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext().getRequest();
String id =req.getParameter("editId");
System.out.println(id);
//编辑页面时ID有值
if(id!=null&& !id.equals("")){
USERSS us=(USERSS) HbQF.getInstance().getObjectById(USERSS.class, id);
System.out.println(us);
}
}
public DataModel getPageData() {
return new LocalDataModel(20);
}
/**
* 自定义的DataModel对象。
*/
@SuppressWarnings({ "unchecked" })
private class LocalDataModel extends PagedListDataModel {
public LocalDataModel(int pageSize) {
super(pageSize);
}
/**
*查询CrossWork
*模糊 带分页的查询所有
*/
@Override
public DataPage fetchPage(int startRow, int pageSize) {
List<USERSS> list = new ArrayList<USERSS>();
Vector v = new Vector();
StringBuffer hql = new StringBuffer(
" from USERSS obj where 1=1 ");
if(username!=null && !"".equals(username)){
hql.append(" and obj.username like ?");
v.add("%"+username+"%");
}
/*if(countrySel!=null && !"".equals(countrySel)){
hql.append(" and obj.countryId.jingchangName like ?");
v.add("%"+countrySel+"%");
}
if(state!=null && !"".equals(state)){
hql.append(" and obj.state = ?");
v.add(state);
}*/
hql.append(" order by obj.username desc");
Long c = (Long) HbQF.getInstance().getObjectByQuery(
"select count(obj) " + hql, v);
list = HbQF.getInstance().getListByQuery(hql.toString(), startRow, pageSize,v);
return new DataPage(c.intValue(), startRow, list);
}
}
}
那么我们就可以在页面上进行展示了,
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>
<%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j"%>
<%
String ctxPath=request.getContextPath();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>无标题文档</title>
<link rel="stylesheet" href="<%=ctxPath%>/css/css.css" type="text/css" />
<script language="JavaScript" src="<%=ctxPath%>/js/tableselect.js"></script>
<script language="JavaScript" src="<%=ctxPath%>/js/jquery-1.4.2.min.js"></script>
<script language="JavaScript" src="<%=ctxPath%>/js/func.js"></script>
<script language="JavaScript" src="<%=ctxPath%>/js/My97DatePicker/WdatePicker.js"></script>
<script language="JavaScript" src="<%=ctxPath%>/js/buttonControl.js"></script>
</head>
<body onload="processButtons('<%=common.security.user.SysUser.getUser(request).getButtonIdsStr() %>')">
<script language="JavaScript">
/* 用户添加 */
function myAdd(){
document.location.href="create.jsf";
}
</script>
<f:view>
<h:form id="myform">
<!-- 内容页上部分 -->
<div id="container">
<div id="main_top">
<div id="main_top_left"></div>
<div id="main_top_center">
<table width="100%">
<tr>
<td width="50%">
<div id="center_top_left">
<div class="center_top_left1"><img src="<%=ctxPath%>/images/tb.gif" /></div>
<div class="center_top_left2">
<font>当前位置 : 生产管理</font>
<font> >> </font>
<font>基础数据</font>
<font> >> </font>
<font>压裂工艺</font>
</div>
</div>
</td>
<td width="45%" align="right">
<div id="checkstyle">
<div class="button1"><input type="checkbox" id="checkbox62" value="checkbox" align="middle" onclick="checkAll('checkbox62','items')"/><font color="#6B7888" style="font-family: cursive;" size="2px"> 全选 </font></div>
<div class="button2" ><img src="<%=ctxPath %>/images/button_add.gif" title="用户添加" onclick="myAdd();" /></div>
<div class="button3" id="btn_id_m07080402"><img src="<%=ctxPath %>/images/button_update.gif" title="修改信息" onclick="myEdit('items','edit.jsf')" /></div>
<h:commandButton id="tjButton11" image="/images/button_delete.jpg" type="submit" actionListener="#{userBean.getDel}" ></h:commandButton>
</div>
</td>
</tr>
</table>
</div>
<div id="main_top_right"></div>
</div>
<!-- 内容页中间部分 -->
<div id="main_middle">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr style="height:4px;"><td></td></tr>
<tr>
<td width="8"> </td>
<td style="border: 1px solid #CECECE;">
<div style="float: left;width: 90%;margin-left: 10px;">
<t:panelGrid columns="2" styleClass="inputTable1" >
<t:outputText value="用户查询"></t:outputText>
</t:panelGrid>
</div>
<div style="float:left;margin-top: 2px;">
<h:commandButton value="查询" id="l9Button"styleClass="btn">
<a4j:support event="onclick" rendered="myform:data"></a4j:support>
</h:commandButton>
</div>
</td>
<td width="8"> </td>
</tr>
<tr>
<td width=8"> </td>
<td>
<!-- 界面内容,表格或表单开始 -->
<t:dataTable renderedIfEmpty="true" id="data" var="obj" width="100%"
preserveDataModel="true" preserveRowStates="true" value="#{userBean.findAll}" styleClass="gridtable"
onmouseover="changeto()" onmouseout="changeback()" rowClasses="row1,row2">
<t:column >
<f:facet name="header">
</f:facet>
<h:panelGroup>
<f:verbatim>
<input id="items" type="checkbox" name="items" value="</f:verbatim><h:outputText value="#{obj.id}" ></h:outputText><f:verbatim>" />
</f:verbatim>
</h:panelGroup>
</t:column>
<t:column>
<f:facet name="header">
<h:outputText value="密码" />
</f:facet>
<h:outputText value="#{obj.password}"/>
</t:column>
<t:column>
<f:facet name="header">
<h:outputText value="用户名" />
</f:facet>
<h:outputText value="#{obj.username}"/>
</t:column>
</t:dataTable>
<!-- 界面内容,表格或表单结束 -->
</td>
<td width="8"> </td>
</tr>
</table>
</div>
</div>
</h:form>
</f:view>
</body>
</html>
第一种:
1.如在你的页面中有 <input type= "hidden " name= "classid " value= "1 ">
注意要写在form中,并且要用name而不是id.
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get( "classid ")可以得到。
2.
<h:form id= "f ">
<input type= "hidden " id= "classid " value= "1 ">
</h:form>
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get( "f:classid ")可以