| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
26 | 27 | 28 | 29 | 30 | 31 | 1 | |||
2 | 3 | 4 | 5 | 6 | 7 | 8 | |||
9 | 10 | 11 | 12 | 13 | 14 | 15 | |||
16 | 17 | 18 | 19 | 20 | 21 | 22 | |||
23 | 24 | 25 | 26 | 27 | 28 | 29 | |||
30 | 1 | 2 | 3 | 4 | 5 | 6 |
注意writer的參數有多個,特別是有一個boolean的參數決定刷新或在附加文本
????????????log?
=
??
new
?PrintWriter(
new
?FileOutputStream(fl,
true
),
true
);
????????????SimpleDateFormat?df?
=
?
new
?SimpleDateFormat(
"
yyyy.MM.dd?'at'?hh:mm:ss\n
"
);
????????????Date?now?
=
?
new
?Date();
????????????String?dateformat?
=
?df.format(now)
????????????BufferedWriter?bf??
=
?
new
?BufferedWriter(
new
?FileWriter(fl,?
true
));
????????????bf.append(dateformat);
????????????bf.close();
????????????log.println(
"
start?connection?databse:
"
);
????????????log.println(
"
driver?name:
"
.concat(driveName);
ProcessInstance.hbm.xml:
<sqlMap namespace="PersonnelRegist">
? <typeAlias alias="ID" type="com.xindeco.core.pojo.IDEntity"/>
? </select>
?? <select id="GraAppInfo.searchUpApply" parameterClass="com.xindeco.business.dto.GraAppInfoDTO"????resultClass="ID" cacheModel="userCache">
?? select distinct a.ID AS id
?? from TGraAppInfo a? left join TEMPLOYUNITBASEINFO b on a.unit=b.MEMBERID
?? where appstatus = '1'
?? <dynamic>
?? <isNotEmpty prepend="AND" property="name">(a.name like '%' + #name# + '%')</isNotEmpty>
?? <isNotEmpty prepend="AND" property="unit">(b.UNITNAME like '%' + #unit# + '%')</isNotEmpty>
?? </dynamic>
? </select>
</sqlMap>
注意sqlmapGraAppInfoDTO的name,unit只能是基本數據類型,不能是復雜數據類型.
2、<script>的位置
<script>
form1.srchEdit.value='<%=srchEdit%>';
form1.srchType.value='<%=srchType%>';????
</script>
<form>
<input type="text" name="srchEdit"/>
<input type="text" name="srchType"/></form>
與<form>
<input type="text" name="srchEdit"/>
<input type="text" name="srchType"/>
</form>
<script>
form1.srchEdit.value='<%=srchEdit%>';
form1.srchType.value='<%=srchType%>';????
</script>
的差別,必須在form加載完對它賦值,否則srchEdit又重新加載,為null
3、hibernate屬性設置出現錯誤:
????? 如果pojo類取fSUnit屬性名,系統將無法識別。get和set將取不到值。
1、get是從服務器上取得數據,post是向服務器上傳送數據。
2、get是將參數數據隊列(表單)加到提交表單的action所指定的url中,值和表單的各個字段是相互對應的,Get將表單中數據的按照variable=value的形式,添加到action所指向的URL后面,并且兩者使用“?”連接,而各個變量之間使用“&”連接,在url中是可以看見的,
post是將表單各個字段放在http header內一起傳送到action中的URL中,
3、get,服務器通過request.getQuery()獲得對應的值;對于post,服務器通過request.getForm()表單的值。
4、get,傳送的數據小,post,傳送的數據大,上傳文件一般用post
特別注意:
<form action="/GraAppInfo/GraAppInfo.do?method=UpList"? method="post">
<select name="srchType">
???? <option value="0">名字</option>
???? <option value="1">用人單位</option>
???</select>
???<input height="18" name="srchEdit" type="text" align="right">
? <input? type="submit" value="查詢">
顯示的URL:http://localhost:8080/GraAppInfo/GraAppInfo.do?method=UpList
<form action="/GraAppInfo/GraAppInfo.do?method=UpList"? method="get">
顯示的URL:http://localhost:8080/GraAppInfo/GraAppInfo.do?srchType=0&srchEdit=da
可見post 會覆蓋action中的參數,
5、中文用post傳遞不會出現亂碼,用get傳遞會出現亂碼
所以傳到action后要通過
String srchEdit = new String(graForm.getSrchEdit().getBytes("iso8859-1"), "gb2312");
處理。
二、傳到頁面的值亂碼
MENUID?UPMENUID?MENUNAME?MENUURL?MENUSEQ?LAYERLEVEL?RIGHTCODE?ISSHOW?TABLETYPE?STARTSTATE
?
?1083?1001?畢業生招聘?#?1?1?1083?1??
?1084?1083?畢業生申報?/GraAppInfo/GraAppInfo.do?method=graappinfolist?6?9?1084?1??
menuid 該層菜單的id ?upmenuid 上一層菜單id? menuname 菜單名字
menuurl 該層菜單的地址(首層菜單為#,沒有地址)
menuseq 該層菜單在上一層菜單的順序
layerlevel 如果是最后一層的菜單為9,其他為1
rigntcode關聯到權限表=menuid
idshow 是否顯示
權限表:
RIGHTID?RIGHTCODE?ROLETYPE?ROLEID?DEPTID?USERID?MENUID?FUNNAME
1084??????????????? 1084????????????? 2????????????????????2??????????????????
?????????????????????0??????? 0??????????? 1084?????????? 畢業生申報
rightid=menuid=rightcode,roletype,roleid
這是單位的菜單設置和權限設置(1000〈menuid〈2000)
2、人事單位內部的設置(4000〈munuid〈5000)
權限的設置通過頁面來控制
public class EmployUnitBaseInfo
{???
?
??? private long ID; //用人單位系統編號---邏輯主鍵
??? private String unitCode; //用人單位代號--業務主鍵
}
1、??? 使用邏輯主鍵,分頁比較方便
2、??? 有可能unitcode會改變,用id可以保證當unitcode改變時,這個實體還存在
在頁面上必須返回workpost + demandid,,
pojo 中的demand類如下:只有以下屬性的setter和getter
??? private String usedNeedNum;
??? private int unitId;
??? private String demandInfo;
private long ID;
??? private String needNum;
??? private String position;
必須再添加一個屬性demandInfo,
而在另一個畢業生申報中又要如圖上操作,,如何在service層向頁面層傳遞這些信息(測試程序員(剩2需求數))
public class DemandServiceImpl
??? extends BaseServiceImpl implements DemandService{
??? public List getDemandList(int unitId)
??? {
????????? long demandId;
????????? int needNum;
????????? int usedNeedNum;
????????? int lastNum;
?????????
????????? String demandInfo;
????????? TRealDemandDAOImpl dao = (TRealDemandDAOImpl) this.getBaseDAO();
????????? List list = dao.getSpareDemandByUnitId(unitId);
????????? Iterator it = list.iterator();
????????? while(it.hasNext())
????????? {
????????????? TRealDemand demand = (TRealDemand) it.next();
????????????? demandId = demand.getID();
????????????? needNum =? Integer.parseInt(demand.getNeedNum());?
????????????? usedNeedNum = Integer.parseInt(demand.getUsedNeedNum());
????????????? if(needNum>usedNeedNum)
????????????? {
????????????????? lastNum = usedNeedNum-needNum;
????????????????? demandInfo = demand.getPosition()+" 剩 " + lastNum +" 需求數 ";
????????????? }
?????????????
????????? }
????????? return list;
??? }
}
在action層再通過以下代碼向頁面傳遞數據:
DemandService demandService = (DemandService) this.getBean("DemandService");
?request.setAttribute("demandList",demandService.findDemandListByUnitId(unitInfo.getID()));
4、注意DemandServiceImpl 是實現類,DemandService 是interface
DemandService demandService = (DemandService) this.getBean("DemandService");
和DemandServiceImpl demandService = (DemandServiceImpl) this.getBean("DemandService");
雖然兩個的操作一樣,但是demandService是接口但可以執行相應的操作,起到黑箱子的作用。
5、記得在action中添加一個實體時,要通過idcard取得sex和birthday的屬性加到內存中(表相對應的pojo)
1、
org.springframework.orm.ObjectRetrievalFailureException: Object of class [com.xindeco.myregister.pojo.MyRegisterInfo] with identifier [14]: not found
MyRegisterInfo在數據庫沒有identifier [14]對象。
2、
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is org.hibernate.MappingException: Repeated column in mapping for entity: com.xindeco.myregister.pojo.MyRegisterInfo column: password (should be mapped with insert="false" update="false")
出錯原因:password 和repassword同時對應數據庫表中的password一列,同時update和insert都設為true。
xml文件如下:
??? <property name="password"
????????????????????????? type="java.lang.String"
????????????????????????? update="true"
????????????????????????? insert="true"
????????????????????????? access="property"
????????????????????????? column="password"
????????????????????????? length = "32"
????????????????????????? />
???????????????????????? <property name="repassword"
????????????????????????? type="java.lang.String"
????????????????????????? update="false"
????????????????????????? insert="false"
????????????????????????? access="property"
????????????????????????? column="password"
????????????????????????? length = "32"
????????????????????????? />
解決的方法:
將repassword的insert和update設為false。
3、
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed;
nested exception is org.hibernate.PropertyNotFoundException: Could not find a getter for ID in class
錯誤原因:hibernate的映射文件中ID是大寫的,而pojo的類中id是小寫的
注意事項:每個pojo的類都要繼承abstractEntity,其中abstractEntity類有個ID的屬性要重寫
?public abstract class AbstractEntity
??? implements Entity, BaseDTO {
??? abstract public long getID();
??? abstract public void setID(long id);
??? public int hashCode() {
??????? return (int)this.getID();
??? }
??? public boolean equals(Object obj) {
??????? if (obj == this) {
??????????? return true;
??????? }
??????? if (obj instanceof Entity) {
??????????? return this.getID() == ( (Entity) obj).getID();
??????? }
??????? return false;
??? }
}
4、
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition
錯誤原因:
在application.xml文件中deleteRegister方法以delete開頭,并沒有被設定為可更改的,應如下設置:
?<!--為事物創建代理類,并指定方法的事物類型-->
? <bean id="baseTxProxy" lazy-init="true" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
??? <property name="transactionManager">
????? <ref bean="transactionManager"/>
??? </property>
??? <property name="transactionAttributes">
????? <props>
??????? <prop key="add*">PROPAGATION_REQUIRED</prop>
??????? <prop key="cancel*">PROPAGATION_REQUIRED</prop>
???????????</props>
??? </property>
? </bean>
加上一行
? <prop key="delete*">PROPAGATION_REQUIRED</prop>
5、
???ERROR org.apache.struts.util.RequestUtils - Error creating form bean of class com.xindeco.business.web.form.GraAppInfoForm
public class? GraAppInfoForm
extends ActionForm 錯誤寫成
public abstratic?class? GraAppInfoForm
extends ActionForm
6、
2006-04-25 08:56:38,495 ERROR com.xindeco.business.web.action.GraAppAction - com.xindeco.business.web.action.GraAppAction@8e2fb5
java.lang.ClassCastException: $Proxy0
?at com.xindeco.business.web.action.GraAppAction.newone(GraAppAction.java:30)
?at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
?at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
?at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
?at java.lang.reflect.Method.invoke(Method.java:585)
?at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
?at com.xindeco.core.web.action.BaseAction.dispatchMethod(BaseAction.java:153)
?at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
actioin類中的newone方法如下:
public? class GraAppAction
??? extends BaseAction {
??? public ActionForward newone(ActionMapping mapping, ActionForm form,
????????????????????????????? HttpServletRequest request,
????????????????????????????? HttpServletResponse response) throws Exception {
???????GraAppService ?graservice = (GraAppService) this.getBean("GraAppService");
}
applicationcontext中的GraAppService的配置如下:
??? <bean id="GraAppDAO" class="com.xindeco.business.dao.impl.GraAppDAOImpl">
??? <property name="support">
????? <ref local="support"/>
??? </property>
??? <property name="sessionFactory">
????? <ref local="sessionFactory"/>
??? </property>
? </bean>
? <bean id="GraAppService" parent="baseTxProxy">
??? <property name="target">
????? <bean class="com.xindeco.business.service.impl.GraAppServiceImpl" autowire="byName">
??????? <property name="baseDAO">
????????? <ref bean="GraAppDAO"/>
??????? </property>
????? </bean>
??? </property>
? </bean>
因此this.getBean("GraAppService");是為了得到GraAppServicImpl類的實現。GraAppService是interface
public class GraAppServiceImpl extends BaseServiceImpl
??? implements GraAppService{
}
7、org.hibernate.hql.ast.QuerySyntaxException: Demand is not mapped. [from Demand where unitid = ? and needNum > usedNeedNum]
hibernate.cfg.xml沒有配置Demand.hbm.xml文件的目錄
8、org.springframework.jdbc.BadSqlGrammarException: Bad SQL grammar [] in task 'Hibernate operation'; nested exception is java.sql.SQLException: 列名 'id' 無效。
java.sql.SQLException: 列名 'name' 無效。
因為hibernate聲明的id,name的columnid屬性沒有與數據庫的字段對應,所以id,name無效。
9、java.lang.NumberFormatException: null
?at java.lang.Integer.parseInt(Integer.java:415)
?at java.lang.Integer.parseInt(Integer.java:497)
?at com.xindeco.business.service.impl.DemandServiceImpl.findDemandListByUnitId(DemandServiceImpl.java:33)
錯誤語句為
?needNum = Integer.parseInt(demand.getNeedNum());
?usedNeedNum = Integer.parseInt(demand.getUsedNeedNum());
因為demand.getUsedNeedNum()==null,無法轉化為string 類型,
10、rg.apache.jasper.JasperException: /GraAppInfo/GraAppInfoNew.jsp(343,29) According to TLD, tag bean:write must be empty, but is not
錯誤的原因:
????????????? <select name="politicsID" >
??????????? ?<option value="">請選擇</option>
?????? <logic:notEmpty name="politicsList">
??????????????? <logic:iterate id="politics" name="politicsList">
????????????????????????? </logic:notEmpty>
???????????<option value="<bean:write name="politics" property="codeID"/>"><bean:write name="politics" property="codeName"/></option>
????????? </logic:iterate>
?</select>
就因為少了/>
以后懂得通過查找字數,來檢查錯誤
11、2006-04-26 13:27:54,812 ERROR com.xindeco.core.util.BeanUtils - bean property [Nation] copy failed
com.xindeco.core.exception.ConvertException: org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: java.lang.String; nested exception is org.hibernate.MappingException: Unknown entity: java.lang.String
beanUtil.beanCopy(grapojo,form,BizConstants.CONVERTER);
要求:
1、pojo類的屬性只有與form屬性名字相同,才能beancopy成功
2、pojo中屬性是實體,在form中一定要用int,long表示
出現這錯誤的原因是pojo中的屬性不是實體,而錯誤寫成:
string
?private String nation;應改成 private?Syscode nation;
12、
2006-04-26 14:38:37,843 ERROR com.xindeco.business.web.action.GraAppAction - com.xindeco.business.web.action.GraAppAction@fa1b2d
java.lang.NullPointerException
?at com.xindeco.business.web.action.GraAppAction.newone(GraAppAction.java:43)
?at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
?at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
hibernate配置文件沒改,程序找不到相應的類
??????? <many-to-one
??????????? name="FSUnit"
??????????? class="com.xindeco.business.pojo.EmployUnitBaseInfo"
??????????? cascade="none"
??????????? outer-join="auto"
??????????? update="true"
??????????? insert="true"
??????????? access="property"
??????????? column="fSUnit"
??????? />
其實FSUnit對應的類應該是FSUnit
??????? <many-to-one
??????????? name="FSUnit"
??????????? class="com.xindeco.business.pojo.FSUnit"
??????????? cascade="none"
??????????? outer-join="auto"
??????????? update="true"
??????????? insert="true"
??????????? access="property"
??????????? column="fSUnit"
??????? />
13、
org.hibernate.MappingException: An association from the table GraAppInfo refers to an unmapped class: com.xindeco.business.pojo.FSUnit
錯誤原因:hibernate.cfg.xml沒有配置fsunit.hbm.xml文件的位置
14、
java.lang.ClassCastException: com.xindeco.business.dao.impl.GraAppDAOImpl
at com.xindeco.business.service.impl.GraAppServiceImpl.addGraduateApp(GraAppServiceImpl.java:16)
GraAppServiceImpl.java:16
第16行: GraAppDAO dao = (GraAppDAO) this.getBaseDAO();//其實得到的是GraAppDAOImpl
錯誤的原因是
public class GraAppDAOImpl
??? extends BaseDAOImpl {
}
沒有實現GraAppDAO接口,正確的做法是
public class GraAppDAOImpl
??? extends BaseDAOImpl implements GraAppDAO {
}
先繼承后實現
15、2006-04-27 08:38:54,078 ERROR com.xindeco.business.web.action.GraAppAction - com.xindeco.business.web.action.GraAppAction@1d6399b
java.lang.ClassCastException: com.xindeco.business.pojo.SysCode
?at org.hibernate.type.StringType.set(StringType.java:26)
?at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:63)
?at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:40)
一般是因為hibernate聲明類型和pojo類聲明的類型不一樣,并且前面已經出現了Hibernate: insert into TGraAppInfo (name, whereFrom, degree, college, speciality, studentRelTel, remark, higherEduLength, highSchool, studyResume, normalOrNot, proxyUnit, workPost, workPlace, studentAddress, studentPostNumber, nation, appStatus) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
的操作提示,查出錯誤的原因有:
??????? <many-to-one
??????????? name="demand"
??????????? class="com.xindeco.business.pojo.Syscode"
??????????? cascade="none"
??????????? outer-join="auto"
??????????? update="true"
??????????? insert="true"
??????????? access="property"
??????????? column="demandID"
??????? />
???????? <property
??????????? name="appStatus"
??????????? type="int"
??????????? update="true"
??????????? insert="true"
??????????? access="property"
??????????? column="appStatus"
??????????? length="10"
??????? />
應改為????
??????? <many-to-one
??????????? name="demand"
??????????? class="com.xindeco.business.pojo.Demand"
??????????? cascade="none"
??????????? outer-join="auto"
??????????? update="true"
??????????? insert="true"
??????????? access="property"
??????????? column="demandID"
??????? />
??<many-to-one
??????????? name="nation"
??????????? class="com.xindeco.business.pojo.SysCode"
??????????? cascade="none"
??????????? outer-join="auto"
??????????? update="true"
??????????? insert="true"
??????????? access="property"
??????????? column="nation"
??????? />
16、
org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: com.xindeco.business.pojo.SysCode
?at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:626)
?at org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:570)
?at
org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:482)
pojo類為:
public class GraAppInfo{
???????????? private College college;
}
action 類為
public class GraAppAction
??? extends BaseAction {
?????? public ActionForward add(ActionMapping mapping, ActionForm form,
???????????????????????????? HttpServletRequest request,
???????????????????????????? HttpServletResponse response) throws Exception {
????????graInfo.setCollege(new College());\\必須從數據庫找到college這個對象,而不能新生成
???????
??????? graInfo.getCollege().setID(graForm.getCollegeID());
??????? graInfo.setAppStatus(Integer.parseInt("0"));
??????service.addGraduateApp(graInfo);
}
public class GraAppServiceImpl extends BaseServiceImpl
??? implements GraAppService{
??? public boolean addGraduateApp(GraAppInfo info)
??? {
??????? this.getBaseDAO().save(info);
??????? return true;
??? }
}
dao類save方法為
??? getHibernateTemplate().save(obj);
當cascade="all",插入new college 除了id和原來的記錄一樣,其他的字段全部都被更新,為null
當cascase=“insert”,插入new college 只會把它的id插入grainfo表中,其他字段不變。
17、java.sql.SQLException: Unable to convert between java.lang.Integer and BLOB.
因為
??????? <property
??????????? name="province"
??????????? type="com.xindeco.business.pojo.SysCode"http://不能用復雜類,
??????????? update="true"
??????????? insert="true"
??????????? access="property"
??????????? column="provinceId"
??????? />
應該改為
??? ??????? <many-to-one
??????????? name="province"
??????????? class="com.xindeco.business.pojo.SysCode"
??????????? cascade="none"
??????????? outer-join="auto"
??????????? update="true"
??????????? insert="true"
??????????? access="property"
??????????? column="provinceId"
??????? />
18、javax.servlet.jsp.JspException: Cannot create iterator for this collection
?at org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:265)
jsp文件如下:
? ?<logic:notEmpty name="graduateList" >
? ?<logic:iterate id="graduate"? name="graduateList" >
?? </ogic:notEmpty >
?? </ogic:iterat>
graduateList是一個類,而logic:iterator要求必須是ArrayList,HashSet....這樣的集合類,而graduateList中一個屬性是ArrayList或HashSet的
應改為:
<logic:notEmpty name="graduateList" property="items">
?<logic:iterate id="graduate"? name="graduateList" property="items" >
?</ogic:notEmpty >
??</ogic:iterat>
19、2006-05-11 17:13:37,468 ERROR com.xindeco.business.web.action.GraAppAction - com.xindeco.business.web.action.GraAppAction@bc22eb
org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed
SysUser user= (SysUser) request.getSession().getAttribute(WebConstants.SESSION_USER);
??????? System.out.println(user.getRole().getRoleName());
當hibernate session取出數據放到http session時,
由于sysuser中role的lazy=“true”,所以沒有將RoleName放到http session中,當System.out.println(user.getRole().getRoleName());
時,雖然http session還開著, hibernat seesion已經關閉
??????? <many-to-one
??????????? name="role"
??????????? class="com.xindeco.business.pojo.SysRole"
??????????? lazy="false"
??????????? cascade="none"
??????????? outer-join="auto"
??????????? update="true"
??????????? insert="true"
??????????? access="property"
??????????? column="roleID"
??????? />
20、Association references unmapped class: com.xindeco.workflow.WFNode
因為application.xml文件中沒有配置<mapping resource="com/xindeco/workflow/WFNode.hbm.xml"/>
系統找不到WFNode
1。當地址為href="/myRegister/myRegister.do?method=listRegister&&size=10&&&start=5"
?? 可以通過下面方法分別取到size&&start:
????Map?requestMap = request.getParameterMap();
????String ?size = requestMap.get("size");
??? String start =requestMap.get("start");
2。checkbox取相同名字,則表單上得到的是一個數組。
????? <tr>
??????????????<td><input type="checkbox" value="<%=register.getId()%>" id="id"/></td>
???????????????<td><%=register.getName()%></td>
???????????????<td><%=register.getPassword()%></td>
??????????????? </tr>
??? 問題一:表單提交以后,form的對象是什么??
????問題二:如何利用request取到id的值數組??
????問題二的解決方法為將id值用","連成字符串,將字符串傳遞給action以后再進行分解.具體的解決為:(實現批量刪除)
??? delete.jsp:
<%@page import="com.xindeco.core.pagination.PaginationSupport" %>
<%@page import="com.xindeco.myregister.pojo.MyRegisterInfo"%>
<%
?? PaginationSupport support = (PaginationSupport)request.getAttribute("registerList");
? ?List registerList=support.getItems();
??? %>
<script>
function concatValue(obj,delimiter) {//將id用,串成string
?????if(!obj) {
??????? ??return false;
??? ?}
???? if(!obj.length&&obj.checked) {
??????????return obj.value;
??? ?}
??? ?var str='';
??? ?for(var i=0;i<obj.length;i++) {
?????? ??if(obj[i].checked) {
?????? ????? ?str=str+obj[i].value;
?????? ????? ?str=str+delimiter;
?? ? ??? }?
??? ?}
???? if(str.length>0) {
?????? ??return str.substring(0,str.length-1);
??? ?}
???? return str;?????
?}
?function dele(obj)
?{
??? ?var str = concatValue(obj,',');
??? ?location.href('/myRegister/myRegister.do??? method=deleteRegister&&ids='+str);
??}
</script>
<html ><head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
</head>
<body>
??? <form action="/myRegister/myRegister.do?method=listRegister">
??????? <table id="detailTable" width="100%" border="0" >
????????????? <tr>
????????????? <td></td> <td>姓名</td><td>password</td>
????????????? </tr>
?????????? <%
?????????? for(int i=0;i<registerList.size();i++)
?????????? {
?????????????? MyRegisterInfo register= (MyRegisterInfo) registerList.get(i);
?????????? %>
????????????? <tr>
????????????????? <td><input type="checkbox" value="<%=register.getId()%>" id="id"/></td>
????????????????? <td><%=register.getName()%></td>
????????????????? <td><%=register.getPassword()%></td>
????????????????? </tr>
?? <% }%>
?? ????? <tr><td><input type = "button" onclick="dele(document.getElementsByName('id'))" value="刪除"></input></td></tr>
??????? </table>
??? </form>
</body>
</html>
action中的方法:
????? String ids = req.getParameter("ids");
????????? String[] idList = ids.split(",");
????????? if(idList!=null){
????????????? Long[] idLong = new Long[idList.length];
????????????? for (int i = 0; i < idList.length; i++) {
????????????????? idLong[i] = Long.valueOf(idList[i]);
????????????? }
????????? if(service.deleteRegister(idLong)) return mapping.findForward("success");
????????? }
其中deleteRegister的方法體為:
public boolean deleteRegister(Long[] ids)
??? {
?????? MyRegisterDAO dao = (MyRegisterDAO) this.getBaseDAO();
?????? for(int i=0;i<ids.length;i++) {
??????????? dao.remove(MyRegisterInfo.class,ids[i]);
??????? }
??????? return true;
??? }
dao.remove的方體為
?? public void remove(Class clazz, Serializable id) {
??????? getHibernateTemplate().delete(get(clazz, id));
??? }
在這過程中我發現了long和Long的最大差別:Long是serializable類型,并且從string轉化的過程也不同.
?? long simple = Long.ParseLong(str);
?? Long objLong = Long.valueOf(str);