各位大哥,帮小弟检查错误,看下,哪里写的不规范,这些代码是要拿给经理看的,找出来,立马加分,现在先放100分,等下会加上400分,小弟的项目是 struts1.2 hibernate 2.0,前台jsp,oracle10G数据库,package com.comstars.ass.person.action;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import net.sf.hibernate.Query;
import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;import com.comstars.ass.person.form.TestForm;import com.comstars.hibernate.databean.TdAnswer;
import com.comstars.hibernate.databean.TdAssscaleRel;import com.comstars.hibernate.databean.AssScale;
import com.comstars.hibernate.databean.TdPersonanswer;
import com.comstars.hibernate.databean.TdPersonanswerPK;
import com.comstars.hibernate.databean.TdQuestion;
import com.comstars.hibernate.databean.TdTestInfo;import com.comstars.hibernate.util.DBHandle;
import com.comstars.struts.util.DateUtil;
import com.sun.org.apache.bcel.internal.generic.NEW;public class inputAnswerAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception { if (request.getParameter("org.apache.struts.taglib.html.TOKEN") != null) {
if (!isTokenValid(request)) {
return mapping.findForward("repeat"); // 重复提交
}
resetToken(request);
} else {
this.saveToken(request);// 保存一个Token到JSP
}
TestForm testForm = (TestForm) form;
int p = 0;// 判段跳转页面
Integer isquery = testForm.getCe();
// 获取testid
String testids = request.getParameter("testid");
System.out.println();
Integer testid = Integer.valueOf(testids.trim());
request.setAttribute("test", testid);
Session session = DBHandle.currentSession();
TdTestInfo testInfo = (TdTestInfo) session.load(TdTestInfo.class,
testid);
AssScale assScale = testInfo.getAssScale();
String logonsn = request.getParameter("logonsn");
request.setAttribute("logonsn", logonsn);
HttpSession session2=request.getSession();
session2.setAttribute("LOGONSN",logonsn);
String nowTime = DateUtil.getStrNowTime();
Transaction tran = session.beginTransaction();
// 取得显示的题目和对应的答案
String hql2 = "select a.questionid,b.answerid from TdQuestion a,TdAnswer b where a.assScale.scaleid=? and a.questionid=b.tdQuestion.questionid order by a.sortnum,b.sortnum";
Query query2 = session.createQuery(hql2);
query2.setInteger(0, assScale.getScaleid().intValue());
Iterator it2 = query2.iterate();
HashMap<String, List> answerMap = new HashMap<String, List>();
List answerList = new ArrayList();
String strTmp = "";
while (it2.hasNext()) {
Object[] obj = (Object[]) it2.next();
HashMap map = new HashMap();
String questionid = obj[0].toString();
if (!strTmp.equals(questionid)) {
answerMap.put(strTmp, answerList);
answerList = new ArrayList();
map.put("answerid", obj[1]);
answerList.add(map);
strTmp = questionid;
} else {
map.put("answerid", obj[1].toString());
answerList.add(map);
}
}
answerMap.put(strTmp, answerList);
List keylist = new ArrayList();
Iterator it = answerMap.keySet().iterator();
while (it.hasNext()) {
String keyName = (String) it.next();
String aa = "";
if (!aa.equals(keyName)) {
keylist.add(keyName);
}
}
// 获得题目前数量
ArrayList count = new ArrayList();
for (int i = 0; i < keylist.size(); i++) {
count.add(i);
}
// 获得题目总数量
request.setAttribute("count2", count.size());
request.setAttribute("questArray", keylist);
request.setAttribute("questList", keylist);
request.setAttribute("uanme", assScale.getName());
try {
for (int i = 0; i < keylist.size(); i++) {
Integer answerId = null;
// 根据问题获取答案,并把答案放入 answers里面
List answers = new ArrayList();
List keyquestionid = answerMap.get(keylist.get(i).toString());
Iterator questionit = keyquestionid.iterator();
while (questionit.hasNext()) {
HashMap map = (HashMap) questionit.next();
answers.add(map.get("answerid"));
}
String strs = String.valueOf(i) + "_as";
String anser = request.getParameter(strs);
if (anser != null) {
if ((anser.equals("A")) || (anser.equals("a"))
|| (anser.equals("1"))) {
answerId = Integer.parseInt(answers.get(0).toString()); } else if ((anser.equals("B")) || (anser.equals("b"))
|| (anser.equals("2"))) {
answerId = Integer.parseInt(answers.get(1).toString());
} else if ((anser.equals("C")) || (anser.equals("c"))
|| (anser.equals("3"))) {
answerId = Integer.parseInt(answers.get(2).toString());
} else if ((anser.equals("D")) || (anser.equals("d"))
|| (anser.equals("4"))) {
answerId = Integer.parseInt(answers.get(3).toString());
} else if ((anser.equals("E")) || (anser.equals("e"))
|| (anser.equals("5"))) {
answerId = Integer.parseInt(answers.get(4).toString());
} else {
answerId = Integer.parseInt(answers.get(1).toString());
}
TdPersonanswerPK pk = new TdPersonanswerPK();
pk.setAnswerid(answerId);
pk.setLogonsn(logonsn);
TdPersonanswer personAnswer = new TdPersonanswer();
personAnswer.setComp_id(pk);
Integer quesind = Integer.parseInt(keylist.get(i)
.toString());
personAnswer.setQuestionid(quesind);
personAnswer.setCrttime(nowTime);
session.clear();
session.save(personAnswer);
session.flush();
p = 1;
}
}
// 更新state为2已经测评
String hqlTestInfo = " from TdTestInfo a where a.testid=?";
Query queryTestInfo = session.createQuery(hqlTestInfo);
queryTestInfo.setInteger(0, testid);
TdTestInfo tdTestInfo = (TdTestInfo) queryTestInfo.uniqueResult();
tdTestInfo.setState(2);
session.update(tdTestInfo);
tran.commit();
} catch (Exception e) {
tran.rollback();
e.printStackTrace();
return mapping.findForward("fail");
} finally {
DBHandle.closeSession();
}
if (1 == p) {
return mapping.findForward("questSuccess");
}
return mapping.findForward("inputanswerlist");
}
}
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import net.sf.hibernate.Query;
import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;import com.comstars.ass.person.form.TestForm;import com.comstars.hibernate.databean.TdAnswer;
import com.comstars.hibernate.databean.TdAssscaleRel;import com.comstars.hibernate.databean.AssScale;
import com.comstars.hibernate.databean.TdPersonanswer;
import com.comstars.hibernate.databean.TdPersonanswerPK;
import com.comstars.hibernate.databean.TdQuestion;
import com.comstars.hibernate.databean.TdTestInfo;import com.comstars.hibernate.util.DBHandle;
import com.comstars.struts.util.DateUtil;
import com.sun.org.apache.bcel.internal.generic.NEW;public class inputAnswerAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception { if (request.getParameter("org.apache.struts.taglib.html.TOKEN") != null) {
if (!isTokenValid(request)) {
return mapping.findForward("repeat"); // 重复提交
}
resetToken(request);
} else {
this.saveToken(request);// 保存一个Token到JSP
}
TestForm testForm = (TestForm) form;
int p = 0;// 判段跳转页面
Integer isquery = testForm.getCe();
// 获取testid
String testids = request.getParameter("testid");
System.out.println();
Integer testid = Integer.valueOf(testids.trim());
request.setAttribute("test", testid);
Session session = DBHandle.currentSession();
TdTestInfo testInfo = (TdTestInfo) session.load(TdTestInfo.class,
testid);
AssScale assScale = testInfo.getAssScale();
String logonsn = request.getParameter("logonsn");
request.setAttribute("logonsn", logonsn);
HttpSession session2=request.getSession();
session2.setAttribute("LOGONSN",logonsn);
String nowTime = DateUtil.getStrNowTime();
Transaction tran = session.beginTransaction();
// 取得显示的题目和对应的答案
String hql2 = "select a.questionid,b.answerid from TdQuestion a,TdAnswer b where a.assScale.scaleid=? and a.questionid=b.tdQuestion.questionid order by a.sortnum,b.sortnum";
Query query2 = session.createQuery(hql2);
query2.setInteger(0, assScale.getScaleid().intValue());
Iterator it2 = query2.iterate();
HashMap<String, List> answerMap = new HashMap<String, List>();
List answerList = new ArrayList();
String strTmp = "";
while (it2.hasNext()) {
Object[] obj = (Object[]) it2.next();
HashMap map = new HashMap();
String questionid = obj[0].toString();
if (!strTmp.equals(questionid)) {
answerMap.put(strTmp, answerList);
answerList = new ArrayList();
map.put("answerid", obj[1]);
answerList.add(map);
strTmp = questionid;
} else {
map.put("answerid", obj[1].toString());
answerList.add(map);
}
}
answerMap.put(strTmp, answerList);
List keylist = new ArrayList();
Iterator it = answerMap.keySet().iterator();
while (it.hasNext()) {
String keyName = (String) it.next();
String aa = "";
if (!aa.equals(keyName)) {
keylist.add(keyName);
}
}
// 获得题目前数量
ArrayList count = new ArrayList();
for (int i = 0; i < keylist.size(); i++) {
count.add(i);
}
// 获得题目总数量
request.setAttribute("count2", count.size());
request.setAttribute("questArray", keylist);
request.setAttribute("questList", keylist);
request.setAttribute("uanme", assScale.getName());
try {
for (int i = 0; i < keylist.size(); i++) {
Integer answerId = null;
// 根据问题获取答案,并把答案放入 answers里面
List answers = new ArrayList();
List keyquestionid = answerMap.get(keylist.get(i).toString());
Iterator questionit = keyquestionid.iterator();
while (questionit.hasNext()) {
HashMap map = (HashMap) questionit.next();
answers.add(map.get("answerid"));
}
String strs = String.valueOf(i) + "_as";
String anser = request.getParameter(strs);
if (anser != null) {
if ((anser.equals("A")) || (anser.equals("a"))
|| (anser.equals("1"))) {
answerId = Integer.parseInt(answers.get(0).toString()); } else if ((anser.equals("B")) || (anser.equals("b"))
|| (anser.equals("2"))) {
answerId = Integer.parseInt(answers.get(1).toString());
} else if ((anser.equals("C")) || (anser.equals("c"))
|| (anser.equals("3"))) {
answerId = Integer.parseInt(answers.get(2).toString());
} else if ((anser.equals("D")) || (anser.equals("d"))
|| (anser.equals("4"))) {
answerId = Integer.parseInt(answers.get(3).toString());
} else if ((anser.equals("E")) || (anser.equals("e"))
|| (anser.equals("5"))) {
answerId = Integer.parseInt(answers.get(4).toString());
} else {
answerId = Integer.parseInt(answers.get(1).toString());
}
TdPersonanswerPK pk = new TdPersonanswerPK();
pk.setAnswerid(answerId);
pk.setLogonsn(logonsn);
TdPersonanswer personAnswer = new TdPersonanswer();
personAnswer.setComp_id(pk);
Integer quesind = Integer.parseInt(keylist.get(i)
.toString());
personAnswer.setQuestionid(quesind);
personAnswer.setCrttime(nowTime);
session.clear();
session.save(personAnswer);
session.flush();
p = 1;
}
}
// 更新state为2已经测评
String hqlTestInfo = " from TdTestInfo a where a.testid=?";
Query queryTestInfo = session.createQuery(hqlTestInfo);
queryTestInfo.setInteger(0, testid);
TdTestInfo tdTestInfo = (TdTestInfo) queryTestInfo.uniqueResult();
tdTestInfo.setState(2);
session.update(tdTestInfo);
tran.commit();
} catch (Exception e) {
tran.rollback();
e.printStackTrace();
return mapping.findForward("fail");
} finally {
DBHandle.closeSession();
}
if (1 == p) {
return mapping.findForward("questSuccess");
}
return mapping.findForward("inputanswerlist");
}
}
是否一个方法代码太长了?
-------------------------------------------
String strs = String.valueOf(i) + "_as";
String anser = request.getParameter(strs);
if (anser != null) {
if ((anser.equals("A")) || (anser.equals("a"))
|| (anser.equals("1"))) {
answerId = Integer.parseInt(answers.get(0).toString()); } else if ((anser.equals("B")) || (anser.equals("b"))
|| (anser.equals("2"))) {
answerId = Integer.parseInt(answers.get(1).toString());
} else if ((anser.equals("C")) || (anser.equals("c"))
|| (anser.equals("3"))) {
answerId = Integer.parseInt(answers.get(2).toString());
} else if ((anser.equals("D")) || (anser.equals("d"))
|| (anser.equals("4"))) {
answerId = Integer.parseInt(answers.get(3).toString());
} else if ((anser.equals("E")) || (anser.equals("e"))
|| (anser.equals("5"))) {
answerId = Integer.parseInt(answers.get(4).toString());
} else {
answerId = Integer.parseInt(answers.get(1).toString());
}
这里能否用switch来替代,让代码精简易懂
二、各行对齐
三、变量有意义一些
四、注意效率,比如for (int i = 0; i < keylist.size(); i++) {
中keylist.size()可考虑使用一变量存储。
五、最主要的:多写注释,注释的内容要明确
等等。
String hqlTestInfo = " from TdTestInfo a where a.testid=?";
Query queryTestInfo = session.createQuery(hqlTestInfo);
queryTestInfo.setInteger(0, testid);
TdTestInfo tdTestInfo = (TdTestInfo) queryTestInfo.uniqueResult();
tdTestInfo.setState(2);
session.update(tdTestInfo);
tran.commit();
为啥还还把者 操作数据库的放在Action 这一层
注意MVC
一个方法最好不要超过一屏,可以按功能分解成几个方法
1.注释不规范,缺少文档注释(/** 注释内容 */),文件的开头部分得有文档注释(head注释),主要说明本类的功能以及相关注意点。每个属性要加上文档注释 说明属性表示的现实意义、数据类型等,每个方法前要加文档注释 说明方法的主要功能、参数名称、参数类型、返回值、返回值类型以及本方法所要抛出的异常等等。2.命名不规范,比如类名的首字母要大写3.分层不规范,个人认为一个项目大致分为以下几个部分:(1)表示层,主要包含jsp与struts (2)model或者domain层,通常是一些java bean,hibernate里面常称为pojo对象 (3)DAO层,既通常所说的数据访问层 (4)业务逻辑服务层(service层),主要处理系统的业务逻辑
以上各层次调用顺序为:jsp页面向服务器发送请求,系统将请求通过servlet转交给对应的struts类,在struts类的excute方法里面调用业务逻辑层的处理方法,业务逻辑层的处理方法调用DAO层的处理方法
建议楼主如果能再添加上spring的话会更好 以上是我本人的个人看法,有不对的地方还望大家不吝指正!
if (!aa.equals(keyName)) {
keylist.add(keyName);
}
变量名字最好要有意义,aa这个不妥。再说了,如果aa就是下面这个判断用到的话,为啥还要aa呢?request.setAttribute("uanme", assScale.getName());
uanme是啥?uname?
这是什么?好像没见代码中用过!!
ArrayList count = new ArrayList();
for (int i = 0; i < keylist.size(); i++) {
count.add(i);
}if ((anser.equals("A")) || (anser.equals("a")) --》equalsIgnoreCase(String anotherString) 不看了!!你们经理要是没有工程化思想,你可以拿过去忽悠一下。
new ArrayList(questionCount)之类的显示给个分配空间的初始值!!
请教!!请教!!
<action path="/inputanswer" name="testForm" scope="request" type="com.comstars.ass.person.action.inputAnswerAction" >
<forward name="inputanswerlist" path="/WEB-INF/jsp/corp/assmanager/inputanswerlist.jsp"/>
<forward name="questSuccess" path="/WEB-INF/jsp/person/questSuccess1.jsp"/>
<forward name="fail" path="/WEB-INF/jsp/person/fail.jsp"/>
<forward name="repeat" path="/WEB-INF/jsp/person/repeat.jsp"/>
</action>
配置action的对应关系,第一次显示对应show的method,第二次的保存对应save的method
public ActionForward show(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {}
//保存
public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {}
现在,我怎么在两个action里面共享数据,我先在query里面给answerMap和keylist赋值,的save里取值,应该怎么写呀,大哥,这是我的最后一个问题,答对了,500分全给你
public class inputAnswerAction extends DispatchAction {
public ActionForward query(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception
{
TestForm testForm = (TestForm) form;
int p = 0;// 判段跳转页面
Integer isquery = testForm.getCe();
// 获取testid
String testids = request.getParameter("testid");
System.out.println();
Integer testid = Integer.valueOf(testids.trim());
request.setAttribute("test", testid);
Session session = DBHandle.currentSession();
TdTestInfo testInfo = (TdTestInfo) session.load(TdTestInfo.class,
testid);
AssScale assScale = testInfo.getAssScale();
String logonsn = request.getParameter("logonsn");
request.setAttribute("logonsn", logonsn); HttpSession session2 = request.getSession();
session2.setAttribute("LOGONSN", logonsn);
// 取得显示的题目和对应的答案
String hql2 = "select a.questionid,b.answerid from TdQuestion a,TdAnswer b where a.assScale.scaleid=? and a.questionid=b.tdQuestion.questionid order by a.sortnum,b.sortnum";
Query query2 = session.createQuery(hql2);
query2.setInteger(0, assScale.getScaleid().intValue());
Iterator it2 = query2.iterate();
HashMap<String, List> answerMap = new HashMap<String, List>();
List answerList = new ArrayList();
String strTmp = "";
while (it2.hasNext()) {
Object[] obj = (Object[]) it2.next();
HashMap map = new HashMap();
String questionid = obj[0].toString();
if (!strTmp.equals(questionid)) {
answerMap.put(strTmp, answerList);
answerList = new ArrayList();
map.put("answerid", obj[1]);
answerList.add(map);
strTmp = questionid;
} else {
map.put("answerid", obj[1].toString());
answerList.add(map);
}
}
answerMap.put(strTmp, answerList);
List keylist = new ArrayList();
Iterator it = answerMap.keySet().iterator();
while (it.hasNext()) {
String keyName = (String) it.next();
String aa = "";
if (!aa.equals(keyName)) {
keylist.add(keyName);
}
}
// 获得题目前数量
ArrayList count = new ArrayList();
for (int i = 0; i < keylist.size(); i++) {
count.add(i);
}
// 获得题目总数量
request.setAttribute("count2", count.size());
request.setAttribute("questArray", keylist);
request.setAttribute("questList", keylist);
request.setAttribute("uanme", assScale.getName());
request.setAttribute("answerMap", answerMap);
request.setAttribute("keylist", keylist);
return mapping.findForward("inputanswerlist");
}
public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception
{
Session session = DBHandle.currentSession();
String logonsn = request.getParameter("logonsn");
String nowTime = DateUtil.getStrNowTime();
System.out.println(logonsn+"========================================logonsn");
List keylist = new ArrayList();
for (int i = 0; i < keylist.size(); i++) {
Integer answerId = null;
// 根据问题获取答案,并把答案放入 answers里面
List answers = new ArrayList();
HashMap<String, List> answerMap = new HashMap<String, List>();
List keyquestionid = answerMap.get(keylist.get(i).toString());
Iterator questionit = keyquestionid.iterator();
while (questionit.hasNext()) {
HashMap map = (HashMap) questionit.next();
answers.add(map.get("answerid"));
}
String strs = String.valueOf(i) + "_as";
String anser = request.getParameter(strs);
if (anser != null) {
if ((anser.equals("A")) || (anser.equals("a"))
|| (anser.equals("1"))) {
answerId = Integer.parseInt(answers.get(0).toString()); } else if ((anser.equals("B")) || (anser.equals("b"))
|| (anser.equals("2"))) {
answerId = Integer.parseInt(answers.get(1).toString());
} else if ((anser.equals("C")) || (anser.equals("c"))
|| (anser.equals("3"))) {
answerId = Integer.parseInt(answers.get(2).toString());
} else if ((anser.equals("D")) || (anser.equals("d"))
|| (anser.equals("4"))) {
answerId = Integer.parseInt(answers.get(3).toString());
} else if ((anser.equals("E")) || (anser.equals("e"))
|| (anser.equals("5"))) {
answerId = Integer.parseInt(answers.get(4).toString());
} else {
answerId = Integer.parseInt(answers.get(1).toString());
}
TdPersonanswerPK pk = new TdPersonanswerPK();
pk.setAnswerid(answerId);
pk.setLogonsn(logonsn);
TdPersonanswer personAnswer = new TdPersonanswer();
personAnswer.setComp_id(pk);
Integer quesind = Integer.parseInt(keylist.get(i)
.toString());
System.out.println(quesind+"========================================quesind");
personAnswer.setQuestionid(quesind);
personAnswer.setCrttime(nowTime);
session.clear();
session.save(personAnswer);
session.flush();
}
}
return mapping.findForward("questSuccess");
}
return mapping.findForward("questSuccess");
}
1,0这种东西用常量表示
比如:
public final static int QuestSuccess=1;public final static String QuestSuccessPage="questSuccess";下面就是:if (QuestSuccess == p) {
return mapping.findForward(QuestSuccessPage);
}
另外,不要写System.out,用logger注释用英文,显得你很牛,哈哈
for (int i = 0; i < keylist.size(); i++) {
Integer answerId = null;
// 根据问题获取答案,并把答案放入 answers里面
List answers = new ArrayList();这段代码 keylist是新生成的 keylist.size()=0啊 下面那个循环永远也不会执行啊
还有写循环可以这样写提高效率for (int i = 0,num=keylist.size(); i < num; i++) {