问题描述
通过struts,map读出数据并显示出来,但是在iterator里面就不运行。请各位大牛看看。action:publicStringbrowseTest()throwsException{Listtests=testService.getAllTests();Maprequest=(Map)ActionContext.getContext().get("request");request.put("tests",tests);returnSUCCESS;}jsp:<s:iteratorvalue="#request.tests"id="test"><li><ahref="browseTest.action?paperID=<s:propertyvalue="#test.paperID"/>"target=_self><s:propertyvalue="#test.paperName"/></a></li></s:iterator>
解决方案
解决方案二:
解决方案三:
struts2.3帮助文档里说已经将iterator标签中id参数给废弃了,改用var替代,你可以试一试看看!
解决方案四:
那数据的时候可以用el表达式拿啊${tests}然后var定义名字调用单个数据时就用${名字.属性了}
解决方案五:
引用2楼u010005508的回复:
struts2.3帮助文档里说已经将iterator标签中id参数给废弃了,改用var替代,你可以试一试看看!
<s:iteratorvalue="request"var="test"><li><ahref="browseTest.action?paperID=<s:propertyvalue="#test.paperID"/>"target=_self><s:propertyvalue="#test.paperName"/></a></li></s:iterator>改成了这样,有框架显示了。但是里面没有内容。中间的s:property还是没有运行。
解决方案六:
用var
解决方案七:
引用5楼u012367513的回复:
用var
改成var了,还是显示不了内容。详情见4L。
解决方案八:
这里<s:propertyvalue="#test.paperName"/>改成<s:propertyvalue="paperName"/>试试
解决方案九:
你用<s:debug></s:debug>标查看下stackcontext中的内容,这放在你迭代语句的下面!看下stackcontext中request项的值以及stackcontext中是否有test这项
解决方案十:
引用8楼u010005508的回复:
你用<s:debug></s:debug>标查看下stackcontext中的内容,这放在你迭代语句的下面!看下stackcontext中request项的值以及stackcontext中是否有test这项
这是我添加之后的代码(123,只是用作测试。)<s:iteratorvalue="request"var="test"><li><ahref="browseTest.action?paperID=<s:propertyvalue="#test.paperID"/>"target=_self><s:propertyvalue="#test.paperName"/><s:propertyvalue="paperName"/><br><s:propertyvalue="123"/><s:debug><s:propertyvalue="request"/></s:debug><s:debug><s:propertyvalue="test"/></s:debug></a></li></s:iterator>这是添加之前显示的页面这是添加之后的页面
解决方案十一:
引用7楼z8380019的回复:
这里<s:propertyvalue="#test.paperName"/>改成<s:propertyvalue="paperName"/>试试
不行啊试了。。。
解决方案十二:
参照你的代码,搞了个小程序试了下,你看看!1、TestsAction内容如下packagecom.gxy.struts.action;importcom.gxy.struts.model.Test;importjava.util.ArrayList;importjava.util.Map;importcom.opensymphony.xwork2.ActionContext;importcom.opensymphony.xwork2.ActionSupport;publicclassTestsAction{publicStringexecute(){ArrayList<Test>tests=newArrayList<Test>();tests.add(newTest(1,"t1"));tests.add(newTest(2,"t2"));Maprequest=(Map)ActionContext.getContext().get("request");request.put("tests",tests);return"success";}}
2.Test实体类packagecom.gxy.struts.model;publicclassTest{privateintpaperId;privateStringpaperName;publicTest(intpaperId,StringpaperName){this.paperId=paperId;this.paperName=paperName;}publicintgetPaperId(){returnpaperId;}publicvoidsetPaperId(intpaperId){this.paperId=paperId;}publicStringgetPaperName(){returnpaperName;}publicvoidsetPaperName(StringpaperName){this.paperName=paperName;}publicStringtoString(){return"paperId:"+paperId+"paperName"+paperName;}}
3、struts.xml文件配置<packagename="test"extends="struts-default"namespace="/"><actionname="tests"class="com.gxy.struts.action.TestsAction"><result>/test.jsp</result></action></package>
4、test.jsp内容如下:<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@tagliburi="/struts-tags"prefix="s"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>test.jsp</title></head><body><s:iteratorvalue="#request.tests"var="gg">paperId:<s:propertyvalue="#gg.paperId"/><br/>paperName:<s:propertyvalue="#gg.paperName"/><br/></s:iterator><s:debug></s:debug></body></html>
5、访问url及结果http://localhost:端口/项目名/tests.action
6、stackcontext中request值(部分)
解决方案十三:
引用8楼u010005508的回复:
你用<s:debug></s:debug>标查看下stackcontext中的内容,这放在你迭代语句的下面!看下stackcontext中request项的值以及stackcontext中是否有test这项
里面没有这项啊这是为什么呢
解决方案十四:
引用12楼u013897700的回复:
Quote: 引用8楼u010005508的回复:
你用<s:debug></s:debug>标查看下stackcontext中的内容,这放在你迭代语句的下面!看下stackcontext中request项的值以及stackcontext中是否有test这项里面没有这项啊这是为什么呢
额。。!不过有空的话,你不妨用我上面的那个小程序试一下