改成<logic:iterate id="bean" name="list" type="java.util.Map">
<tr>
<td height="30" align="center" width="100" class="fr"><bean:write name="bean" property="spName"/> </td>
</tr>
</logic:iterate>
<tr>
<td height="30" align="center" width="100" class="fr"><bean:write name="bean" property="spName"/> </td>
</tr>
</logic:iterate>
解决方案 »
- 关于Java开发的程序国际化的问题。
- struts拦截器把后面带的参数如?name=123拦截掉了,怎么处理?
- 求上传和下载大文本文件功能
- JTA只是控制数据库的事务?
- jsp动态包含struts1的action报错了
- resin 编译jsp 到 work目录下 页面失效问题?
- 如何得到某周,第一天和最后一天的日期
- 调查:J2EE开发中实际用到的技术(回答必有分,人格担保)
- 请问那里可以下 Java Web Server2.0
- DOM中判断XML文件中的一个接点是否存在的方法是什么?
- 关于Weblogic初级问题
- 问个问题,有没有连接上数据库,可以把数据库中的表的数据,转成xml文件,只需要指定选项就可以了!
我按照你说的改了。但是提示了另外的错误信息:
java.lang.ClassCastException
at jsp_servlet._jsp.__splist._jspService(__splist.java:153)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run (ServletStubImpl.java:1053)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:387)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
at weblogic.servlet.internal.RequestDispatcherImpl$ForwardAction.run(RequestDispatcherImpl.java:382)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:286)
at org.apache.struts.action.ActionServlet.processActionForward(ActionServlet.java:1759)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1596)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:492)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1053)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:387)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6310)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3622)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2569)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
改成session.setAttribute("list",list);
如果没有debug环境的话,就多写几个system.out来跟踪
在处理结果集的时候把你的DataMap换成HashMap试试
如果按照我说的改的话,你在这里必须用Map或者HashMap了
to:zcjl和sandyen
你们说得意思是不是,在我取得结果集的时候直接把记录放到HashMap中啊。也就是这样的
HashMap dm = null;
while(rs.next())
{
//System.out.println(" 循环**************");
dm = new HashMap();
dm.put("spName",turnStr(rs.getString("SPNAME")));
dm.put("spCount",turnStr(rs.getString("SPCOUNT")));
dm.put("spPrice",turnStr(rs.getString("SPPRICE")));
dm.put("spMs",turnStr(rs.getString("SPMS")));
list.add(dm);
}
rs.close();
return list;
我去试一试。
iterate的标签是list类型的
我对我的程序做了跟踪,我自己的类在没有出现异常的地方。请大家帮我。
我给你的那个肯定没有问题,那个type是list里面放的formBean的类型
不能正常操作?
to sandyen:
你说的list里面放的formbean是什么意思。我现在放的好像是自己new的HashMap类。我怎么把formbean放到list里,这里我不太明白。
你的程序还是那个错误吗?
Error 500--Internal Server Error
java.lang.ClassCastException
at jsp_servlet._jsp.__splist._jspService(__splist.java:175)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1053)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:387)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
at weblogic.servlet.internal.RequestDispatcherImpl$ForwardAction.run(RequestDispatcherImpl.java:382)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:286)
at org.apache.struts.action.ActionServlet.processActionForward(ActionServlet.java:1759)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1596)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:492)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1053)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:387)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6310)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3622)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2569)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
就出现上述错误。
如果我在jsp端这样写<logic:iterate id="bean" name="list" type="java.util.HashMap">
就出现如下错误:
javax.servlet.jsp.JspException: No getter method for property spName of bean bean
at org.apache.struts.util.RequestUtils.lookup(RequestUtils.java:517)
at org.apache.struts.taglib.bean.WriteTag.doStartTag(WriteTag.java:179)
at jsp_servlet._jsp.__splist._jspService(__splist.java:185)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1053)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:387)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:431)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
<tr>
<td height="30" align="center" width="100" class="fr"><bean:write name="spName"/> </td>
</tr>
</logic:iterate>
</logic:iterate>
循环的是你的自己定义的类DataMap,即bean是DataMap型的,而
<bean:write name="bean" property="spName"/>
则调用DataMap的方法getSpName(),即bean.getSpName(),而你定义的类没有这个方法。你应该这样定义你的DataMap
public class DataMap {
private String spName = null;
public void setSpName(String spName) {
this.spName = spName;
}
public String getSpName() {
return spName;
} ......}
bean write是可以用HashMap做valueObject的
我这样用都可以
只是不知道楼主使用时到底有什么古怪
导致报错
解决办法是:
1、在DataMap.java文件中加入getMap()函数:
package emptyprj;
import java.util.*;
public class DataMap {
private HashMap map = null;
public DataMap() {
this.map = new HashMap();
}
public void set(String Key,String value)
{
map.put(Key,value);
}
public String get(Object key)
{
String value = "";
value = (String)map.get(key);
return value;
}
public HashMap getMap() //加在这里
{
return map;
}
}
2、在输出JSP文件<logic:iterate>中定义一个中间Bean:
<%@ page contentType="text/html;charset=GB2312" language="java" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-template.tld" prefix="template" %><html:html >
<head>
<title>
</title>
<META http-equiv=Content-Type content="text/html; charset=gb2312"></head>
<body bgColor=white>
<html:base/> <html:base/> <logic:iterate id="list" name="list">
<p>
<bean:define property='map' name='list' id='list' /> /*加在这里*/
<bean:write name="list" property="spName" />
</p>
</logic:iterate>
</body>
</html:html >
如果想实验一个,可用我下面的Action文件试试:
package emptyprj;
import java.lang.reflect.InvocationTargetException;
import java.util.Locale;
import javax.servlet.ServletException;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.util.ModuleException;
import org.apache.struts.util.MessageResources;
import emptyprj.DataMap;
import java.util.*;
public final class hasAction extends Action
{
private Log log = LogFactory.getLog("org.apache.struts.webapp.Example");
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception
{
// Extract attributes and parameters we will need
Locale locale = getLocale(request);
MessageResources messages = getResources(request);
HttpSession session = request.getSession();
hasForm myform = (hasForm) form;
String variable1= myform.getMybeanvariable1();
try
{ ArrayList list = new ArrayList();
DataMap dm = null;
for(int i=0;i<4;i++)
{
dm = new DataMap();
dm.set("spName","SPNAME"+String.valueOf(i));
dm.set("spCount","SPCOUNT");
dm.set("spPrice","SPPRICE");
dm.set("spMs","SPMS");
list.add(dm);
}
request.setAttribute("list",list); return (mapping.findForward("success"));
}
catch (Exception e)
{ throw new RuntimeException(e.getMessage());
}
}
}
上述代码在JSPStudio中调试通过,输入是:
SPNAME0
SPNAME1
SPNAME2
SPNAME3
我按照你说的改了一下,同样提示我类型转化错误。实在jsp运行期出现的。
to kui:
非常感谢的你的讲解。我把你的代码,拷贝了一下,放到我的工程里,只是action中我是调用另一个类的方法,来获得ArrayList。具体做法如下
类方法:
DataMap dm = null;
while(rs.next())
{
//System.out.println(" 循环**************");
dm = new DataMap();
dm.set("spName",turnStr(rs.getString("SPNAME")));
dm.set("spCount",turnStr(rs.getString("SPCOUNT")));
dm.set("spPrice",turnStr(rs.getString("SPPRICE")));
dm.set("spMs",turnStr(rs.getString("SPMS")));
list.add(dm);
}
rs.close();
return list;
在action中得到这个list。存入request中。
我的DataMap类是按照你说的改的。
jsp端我是这样写的:
<logic:iterate id="list" name="list" >
<bean:define property="map" id="list" name="list"/>
<bean:write name="list" property="spName"/>
</logic:iterate>
提示我的错误是这样的:
javax.servlet.jsp.JspException: No getter method for property spName of bean list
at org.apache.struts.util.RequestUtils.lookup(RequestUtils.java:517)
at org.apache.struts.taglib.bean.WriteTag.doStartTag(WriteTag.java:179)
我觉得我的问题主要是由于一下几点我不太明白造成的:
1。<logic:iterate>标签里面的id属性,name属性。
在这个例子里面 id=“bean” name=“list”,id=“bean”中的“bean”是 根据什么写的,随便等于任何一个名字可以么。
2。<bean:write>标签中的 name="bean" 是什么意思。property="spName" 中的spName在什么里定义的。我是在一个actionform里定义的。
在我单独的bean里没有这个变量,只是在bean里把结果集存入链表时的一个对象索引名。
3。还有<logic:define>标签中id和name属性都是根据什么写的。 请讲解,谢谢!!!!
具体做法如下:
在我的DataMap类中增加set和get方法,像kui所说的增加getMap()方法。
其他的做法都按照kui所说的做。
特别感谢kui(kui),sendyen的热心帮助