一个很奇怪的问题:关于struts自定义标签

06-06-17 springlet
我定义了一个sturts标签,用于显示select下拉列表初始化的内容,下面还有两个文本框和提交按钮,可是在执行时,页面上只显示了select的内容,文本框和提交按钮都没有显示出来,而且select中的内容也显示得不完全,因为select的内容是从数据库读出的,可是页面上select中的记录数少于数据库中的记录数,这是为什么?以下是我的自定义标签:

package tag;

import java.util.Iterator;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.JspTagException;

import javax.servlet.jsp.JspWriter;

import javax.servlet.jsp.tagext.TagSupport;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.Transaction;

import com.Hibernate.SessionFactory;

import com.jingpin.Courseinfo;

import com.jingpin.Kindinfo;

public class InitListTag extends TagSupport {

private Log log = LogFactory.getLog(this.getClass().getName());

public int doEndTag() throws JspException{

JspWriter out=pageContext.getOut();

try{

out.println("<select size=\"8\" name=\"select1\" id=\"select1\" style=\"width:200\" ondblclick=\"add();\" multiple=\"multiple\">");

Session session=SessionFactory.currentSession();

Transaction tx=session.beginTransaction();

Query query=session.createQuery("from Courseinfo c,Kindinfo k where c.kindType=k.kindType and c.kindSecond=k.kindSecond order by c.kindSecond");

for(Iterator it=query.iterate();it.hasNext();){

Object[] objs=(Object[])it.next();

Courseinfo cinfo=(Courseinfo)objs[0];

Kindinfo kinfo=(Kindinfo)objs[1];

String str1=cinfo.getCourseId().toString();

String str2=cinfo.getCourseName();

String str3=cinfo.getSchoolName();

String str4=cinfo.getCourseDutyName();

String str5=cinfo.getKindFirst();

String str6=kinfo.getKindFirstName();

String str7=cinfo.getKindSecond();

String str8=kinfo.getKindSecondName();

out.println("<option value =\""+str1+"\">"+str2+","+str3+","+str4+","+str5+","+str6+","+str7+","+str8+"</option>");

}

out.println("</select>");

tx.commit();

SessionFactory.closeSession();

}catch(Exception e){

throw new JspTagException("IOException:" + e.toString());

}

return EVAL_PAGE;

}

}

注:我曾经以为是返回值有问题,但是将返回值改为return super.doEndTag();之后还是不对。

急死我了

banq
2006-06-19 14:38
首先,你的设计代码有问题:

在界面代码中直接调用数数据操作,这两个方面偶合在一起了,和传统两层结构没有区别.

别以为我没有回答你问题,正是这样偶合代码,所以,你现在出现问题,自己无法判断维护,也就是带来维护性差的问题,其他人也不是神仙,也不会立即一眼就看出,除非和你一样编码,一样错误.

猜你喜欢