各位大哥,帮小弟检查错误,500分给大家

xuegedebao 2009-09-21 09:30:34
各位大哥,帮小弟检查错误,看下,哪里写的不规范,这些代码是要拿给经理看的,找出来,立马加分,现在先放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");
}
}



...全文
233 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
德意志军工 2009-09-21
  • 打赏
  • 举报
回复
既然是考试,有多少题应该是已知的,这样的话试用数组效率高些,或者是
new ArrayList(questionCount)之类的显示给个分配空间的初始值!!
请教!!请教!!
老紫竹 2009-09-21
  • 打赏
  • 举报
回复
你应该先说一下自己的看法,而不是等着别人的答案。
APOLLO_TS 2009-09-21
  • 打赏
  • 举报
回复
送你一句话:基本功太差。

// 获得题目前数量
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)

不看了!!

你们经理要是没有工程化思想,你可以拿过去忽悠一下。


德意志军工 2009-09-21
  • 打赏
  • 举报
回复
import com.sun.org.apache.bcel.internal.generic.NEW;
这是什么?好像没见代码中用过!!
fg2224 2009-09-21
  • 打赏
  • 举报
回复
顶顶。。
  • 打赏
  • 举报
回复
挺好的,自己看懂就行了
xuegedebao 2009-09-21
  • 打赏
  • 举报
回复
Struts框架中的Action的功能就是将请求与业务逻辑分开
xuegedebao 2009-09-21
  • 打赏
  • 举报
回复
我们经理说,我代码两分个方法,应该如何写呀,他说是,struts最基本的,
sjkof 2009-09-21
  • 打赏
  • 举报
回复
再补充几点

格式方面可以用eclipse自带的调整格式的功能

String aa = "";
if (!aa.equals(keyName)) {
keylist.add(keyName);
}
变量名字最好要有意义,aa这个不妥。再说了,如果aa就是下面这个判断用到的话,为啥还要aa呢?

request.setAttribute("uanme", assScale.getName());
uanme是啥?uname?
深藏Blue_dct 2009-09-21
  • 打赏
  • 举报
回复
该说的 上面都说的差不多了 我作个小总结:
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的话会更好

以上是我本人的个人看法,有不对的地方还望大家不吝指正!
千骑卷平冈 2009-09-21
  • 打赏
  • 举报
回复
下面的就不看了 首先类名inputAnswerAction首字母就不应该小写的 汗~~
lzh_me 2009-09-21
  • 打赏
  • 举报
回复
格式化一下
cat_cook 2009-09-21
  • 打赏
  • 举报
回复
我说下注释问题。以‘//’的单行注释是不规范的吧,应该在方法前加文档注释,说明方法的功能 参数意义和返回值的类型意义等方面;也可以在类前加文档注释,说明该类实现的功能等。
  • 打赏
  • 举报
回复
((anser.equals("D")) || (anser.equals("d"))可以用equalsIgnoreCase
一个方法最好不要超过一屏,可以按功能分解成几个方法
xuegedebao 2009-09-21
  • 打赏
  • 举报
回复
那应该放哪里呀,
还有呀,大哥,帮我看下格式哪里有错误呀
「已注销」 2009-09-21
  • 打赏
  • 举报
回复
你用struts 就用MVC模式
// 更新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();
为啥还还把者 操作数据库的放在Action 这一层
注意MVC
cbdhxka 2009-09-21
  • 打赏
  • 举报
回复
一、分层,数据与操作层分开
二、各行对齐
三、变量有意义一些
四、注意效率,比如for (int i = 0; i < keylist.size(); i++) {
中keylist.size()可考虑使用一变量存储。
五、最主要的:多写注释,注释的内容要明确
等等。

飞哥在线 2009-09-21
  • 打赏
  • 举报
回复
代码确实比较臃肿
little06 2009-09-21
  • 打赏
  • 举报
回复
考虑mvc是否在这里实现了,感觉里面的代码相当臃肿
little06 2009-09-21
  • 打赏
  • 举报
回复
代码长队来说
是否一个方法代码太长了?
-------------------------------------------
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来替代,让代码精简易懂
加载更多回复(14)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧