日期:2014-05-18  浏览次数:20693 次

正在做SSH整合的小项目 遇到点小问题
做一个查询功能 但是始终不好使 不知道该怎么改
首先给出实现类
	public List<Commodity> all(String cname) {
return factory.getCurrentSession().createQuery("from Commodity c where c.cname like '%"+cname+"%'").list();
}

放入要查询的商品名字,然后返回查询结果list,这个没什么问题。可以遍历输出出来。
然后是action中的代码
	public String commoditySearch() {
ActionContext.getContext().put("commodity",commodityService.all(commodity.getKeyword()));
return "result";
}

getKeyword()是用来接收form中提交的所要查询的关键字,用println实验发现可以接收到
list也可以遍历出来
然后是jsp中的form表单
	<s:form action="currentlist" method="get">
<s:textfield id="keyword" name="commodity.keyword" />
<input type="submit" value="X一下"/> 
    </s:form>

struts的配置
	<package name="commodity" extends="struts-default">
<action name="currentlist" class="pageAction" method="commoditySearch">
<result name="result">result.jsp</result>
<result name="error">error.jsp</result>
</action>
</package>

result.jsp中用来遍历的代码
	<s:iterator value="#request.commodity">
<s:property value="cid"/>
<s:property value="cname"/>
¥<s:property value="cprice"/><br/>
</s:iterator>

可以正常跳刀result页面 但是#request.commodity没有接受到结果
如果我在action不用getkeyword而直接写"关键字" 然后直接访问http://localhost:8080/SSH_03/currentlist
就可以得到结果
希望高手不吝赐教
------解决方案--------------------
引用:
Quote: 引用:

ActionContext.getContext().put这个方法可能使用不当。参考,http://www.iteye.com/problems/82392。<s:iterator value="#request.commodity">它是默认是去page,request,session,application里面去找的,你用commodity.getKeyword()时,它优先去找commodity的值,发现有值,就取到它,在页面里显示出来,结果显示出来就是错误的值。同理,另一种情况也能解释了。

ActionContext.getContext().put改为ActionContext.getContext().getSession().put
然后页面中的<s:iterator value="#request.commodity">改为session.commodity应该就可以了。

或者直接把<s:iterator value="#request.commodity">改为value="#commodity"试试。