用注解配置的SSH,struts2怎么响应JSON(返回一个字符串)
我是要在第一个下拉框中获取值 将值通过异步传到Action中 在Action中响应JSON返回一个字符串 在JS中拆解 然后填充第二个下拉框 完成一个二级联动效果
Action中的 一个方法
// 需求分析第二级联动(通过项目名称获取需求标题)
public String demnameList() throws Exception {
//项目名称
String proname = request.getParameter("proname");
//通过项目名称获取的需求标题集合
List<Project_need> list = iProject_needService.proNeedList(proname);
StringBuffer sb = new StringBuffer();
for (Project_need project_need : list) {
sb.append(project_need.getTitle()+",");
}
//回应JQ请求
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(sb.toString().substring(0, sb.length()-1));
response.getWriter().flush();
return "project-model-add";
}
JSP中的第一个下拉框
<select id="proname" name="project_model.proname" onchange="need()" >
<option value="0">请选择项目..</option>
<c:forEach var="pro" items="${proList }">
<option value="${pro.proName}">${pro.proName}</option>
</c:forEach>
</select>
JSP中的第二个下拉框
<select id="demname" name="project_model.demname">
<option value=0>请选择需求分析</option>
</select>
JS
function need() {
$("#demname").empty();// jquery清空下拉框用对象.empty()方法
$.ajax({
url : "project_modelAction!demnameList", // 请求的路径
type : "post",// 请求的方式
data : "proname=" + $("#proname").val(),// 要发送的数据 相当要传的参数
dataType : "text",// 返回的数据类 json
success : function(data) {
if(data!=""){
// 处理ajax的回写值
var tempArray = data.split(",");
for ( var i = 0; i < tempArray.length; i++) {
//var tempArray1 = tempArray[i].split(",");
// 给省的下拉框赋值
var op = new Option(tempArray[i], tempArray[i]);
$("#demname").append(op);// jquery给下拉框赋值
}
}else{
alert("没有数据");
}
}
});
}
为什么在Action中可以获取页面穿过来的值 但是Action传到JS中却没有 求解脱
------解决思路----------------------
// 需求分析第二级联动(通过项目名称获取需求标题)
public String demnameList() throws Exception {
//项目名称
String proname = request.getParameter("proname");
//通过项目名称获取的需求标题集合
List<Project_need> list = iProject_needService.proNeedList(proname);
StringBuffer sb = new StringBuffer();
for (Project_need project_need : list) {
sb.append(project_need.getTitle()+",");
}
return "project-model-add";
}
public void setSb(StringBuffer sb){
this.sb = sb ;
}
public StringBuffer getSb(){
return sb ;
}
去掉你的JQ请求,想其他struts请求一样,返回的你的“project-model-add”,在struts.xml中配置
<action name="your.actionName" class="your.actionClass" method="demnameList">
<result name="success" >../msg.jsp</result>
</action>
现在你只需要写一个msg.jsp,里面只有一句话 ${sb},就行了,,,,,
那么你的ajax将会得到msg.jsp中的全部信息,也就是模拟得到你sb.toString()...
这是我第一次做web项目时自己的想法,虽然现在有更好的办法,不过我还是可以给你介绍介绍。。。
------解决思路----------------------
测试了一下,手动close responese的流是可行的。不过要注意的是,你手动close后就是向客户端相应数据,后面代码要return null结束整个函数,要不然有异常
------解决思路----------------------
不用,试试把flush改成close.还有后面改成return null