梦幻手游霸屏留言,是“荣耀”还是“毒药”

Spring mvc
如何遍历传递到jsp的map -Java- TryCatch
>> Content
Spring mvc
如何遍历传递到jsp的map
在spring&mvc的controller里检索到一个表里的各行数值,赋值给一个map,但是不知道在jsp里如何显示。写了一个jsp,但是没有反应,什么都没显示出来。帮看看是哪里有问题&&Collection&availableI&&availableItems&=&tpermissionService.findAll(Tpermission.class);&&Iterator&Tpermission&&it&=&availableItems.iterator();&&Map&String,&String&&map&=&new&HashMap&String,&String&();&&&while(it.hasNext())&&{&&&&tpermission&=&it.next();&&&&&map.put(tpermission.getAuthid(),tpermission.getAuthname());&&}&return&"padd";JSP页面&&前面的文字可以显示,后面的map不能显示&table&border="0"&cellspacing="0"&cellpadding="0"&width="1000"&&&&&tr&&&&&&td&valign="top"&align="center"&bgcolor="#6da9fb"&权限添加成功!&/td&&&&/tr&&/table&&table&&tr&&&&c:forEach&items="${map}"&var="tpermiss"&&&&&&&td&fff&${tpermiss.key}&/td&&&&&&&&&&&&&&&td&vvv&${tpermiss.value}&/td&&&&/c:forEach&&&&/tr&&/table&
------Solutions------
spring&MVC不是把数据放在一个叫做model的东东里么,如:model.put("availableItems",availableItems);然后你在jsp里直接取availableItems进行遍历就行了
------Solutions------
map你在哪里设置的?怎么没有看到你把map放在什么域里了?action里应该有request.setAttribute("map",map);之类的啊
------Solutions------
引用&1&楼&dengsilinming&的回复:spring&MVC不是把数据放在一个叫做model的东东里么,如:model.put("availableItems",availableItems);然后你在jsp里直接取availableItems进行遍历就行了&为什么我看网上的例子都没有用request这些来传参呢详解springmvc之json数据交互controller方法返回值为简单类型
作者:思念悲伤
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了springmvc之json数据交互controller方法返回值为简单类型,非常具有实用价值,需要的朋友可以参考下
当controller方法的返回值为简单类型比如String时,该如何与json交互呢?
使用@RequestBody
比如代码如下:
@RequestMapping(value="/ceshijson",produces="application/charset=UTF-8")
@ResponseBody
public String ceshijson(@RequestBody String channelId) throws IOException{
return channelId;
如果代码为上面这种情况时,前台发送json时,应该这样写(写法有很多,能用就行)
function channel(){
//先获取选中的值
var channelId = $("#channelId option:selected").val();
//来判断发送的链接
if(channelId ==2){
url:"ceshijson",
type:"post",
dataType:'json',
contentType:'application/charset=utf-8',
data:JSON.stringify({'channelId':channelId}),
success:function(data){
alert(data.channelId);
error:function(XMLHttpRequest, textStatus, errorThrown){
alert("Error")
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
这里需要特别注意:上篇也强调过,使用了@RequestBody时,它要求String channelId接收到数据为json字符串。也就是要是data写成这样: data:{‘channelId':channelId},就是错误的。因为这是json对象形式。
要是你不想使用JSON.stringify()这个函数,那就自己手动字符串拼接:
data:'{"channelId":'+channelId+'}'
这里还要注意channelId是双引号,不能写成单引号,因为这是json语法规则。你改成单引号,也就是
**错误写法
data:"{'channelId':"+channelId+"}"
这种形式,虽然可以传给后台,但是后台传回来的会出现undefined。也就是key必须要用双引号包围。
不使用@RequestBody
@RequestMapping(value="/ceshijson",produces="application/charset=UTF-8")
@ResponseBody
public String ceshijson(String channelId) throws IOException{
Map&String,Object& map = new HashMap&String,Object&();
map.put("channelId", channelId);
ObjectMapper mapper = new ObjectMapper();
channelId = mapper.writeValueAsString(map);
return channelId;
url:"ceshijson",
type:"post",
dataType:'json',
//contentType:'application/charset=utf-8',
data:"channelId="+channelId,
success:function(data){
alert(data);
error:function(XMLHttpRequest, textStatus, errorThrown){
alert("Error")
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
这种方式利用ObjectMapper中的writeValueAsString将Java对象转换为json字符串。
总结:这种方式,其实是没有多大的实际意思,因为一般接收数据不是这么接收的。只做了解!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Spring MVC 前后台数据交互_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Spring MVC 前后台数据交互
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩2页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢SpringMVC 的 Controller 返回各种视图的处理方式_Java教程_动态网站制作指南
SpringMVC 的 Controller 返回各种视图的处理方式
来源:人气:3636
SingMVC 的 Controller 返回各种视图的处理方式SpringMVC 的 Controller 可以返回各种各样的视图。比如 , JSON, Velocity, FreeMarker, , PDF, , 还有Html字符流 等等。那它们该如何的进行处理的呢?这里就涉及到 各种视图(View)对应的各种视图解析器(ViewResolver). 基本上上面说的每一种视图就对应用一种视图解析器来处理。基本上各种视图解析器大致上可以分为两类:一是基于URL的视图解析器;一种是其它解析器;所谓的UrlBasedViewResolver,就是将返回值作为最终视图的url的一部分,然后和相关配置组合起来,就是最终的视图地址url. 我们看下UrlBasedViewResolver的解析器有哪些:1. 返回JSP返回JSP是最简单的,JSP视图的视图解析器为 InternalResourceViewResolver,也是一个UrlBasedViewResolver解析器。其对应的解析器的配置一般如下:&bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&
&property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/&
&property name="prefix" value="/WEB-INF/jsp/"/&
&property name="suffix" value=".jsp"/&&/bean&使用该例子,我们好好理解下什么是 &基于URL& 的视图解析器,比如我们的 Controller 中最后的返回的处理代码为: return "index"; 那么&基于URL& 的视图解析器就会将返回值 &index& 作为最后视图的URL的一部分,然后结合上面的配置 &property name="prefix" value="/WEB-INF/jsp/"/& 和 &property name="suffix" value=".jsp"/&,最后得到最终的URL: "/WEB-INF/jsp/" + "index" + ".jsp" == "/WEB-INF/jsp/index.jsp" 这就是所谓的 &基于URL& 的视图解析器的工作方式。2. 返回 HTML 页面我们知道在Servlet中,我们是可以直接在其中打印输出HTML字符流到最终页面,比如下面的代码来自阿里巴巴的支付宝的接入示例中的代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
// ... ...
//建立请求
String sHtmlText = AlaySubmit.buildRequest(sParaTemp,"get","确认");
response.getWriter().println(sHtmlText);
* 建立请求,以表单HTML形式构造(默认)
* @param sParaTemp 请求参数数组
* @param strMethod 提交方式。两个值可选:post、get
* @param strButtonName 确认按钮显示文字
* @return 提交表单HTML文本
public static String buildRequest(Map&String, String& sParaTemp, String strMethod, String strButtonName) {
//待请求参数数组
Map&String, String& sPara = buildRequestPara(sParaTemp);
List&String& keys = new ArrayList&String&(sPara.keySet());
StringBuffer sbHtml = new StringBuffer();
sbHtml.append("&!doctype html&&html&&head&&meta http-equiv=\"Content-Type\" content=\"text/ charset=UTF-8\"&");
sbHtml.append("&title&支付宝即时到账交易接口&/title&&/head&&body&");
sbHtml.append("&form id=\"alipaysubmit\" name=\"alipaysubmit\" action=\"" + ALIPAY_GATEWAY_NEW
+ "_input_charset=" + AlipayConfig.input_charset + "\" method=\"" + strMethod
for (int i = 0; i & keys.size(); i++) {
String name = (String) keys.get(i);
String value = (String) sPara.get(name);
sbHtml.append("&input type=\"hidden\" name=\"" + name + "\" value=\"" + value + "\"/&");
//submit按钮控件请不要含有name属性
sbHtml.append("&input type=\"submit\" value=\"" + strButtonName + "\" style=\"display:\"&&/form&");
sbHtml.append("&script&document.forms['alipaysubmit'].submit();&/script&");
sbHtml.append("&/body&&/html&");
return sbHtml.toString();
}很显然,Servlet直接将HTML的字符流输出到了浏览器端,那么在SpringMVC中该如何做呢?其实在SpringMVC中我们也是可以如下实现的:
@RequestMapping(value="/getPage")
public void writeSubmitHtml(Reader reader, Writer writer, Http session) throws IOException {
User user = (User) session.getAttribute(ConstantConfig.LONGIN_USER);
StringBuffer sbHtml = new StringBuffer();
sbHtml.append("&!doctype html&&html&&head&&meta http-equiv=\"Content-Type\" content=\"text/ charset=UTF-8\"&");
sbHtml.append("&title&支付宝即时到账交易接口&/title&&/head&&body&"+ user.getNo() +"&/body&&/html&");
writer.write(sbHtml.toString());
}我们看到我们直接使用了参数 Writer writer,返回值为 void, 其实参数 Writer writer 也可以换成 PrintW 直接写出HTML的字符流。我们也知道在Servlet中,我们是可以直接forward或者redirecit到html页面,所以我们也可以如下在springmvc中返回到html页面:
@RequestMapping(value="/htmlView")
public void htmlView(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
request.getRequestDispatcher("index.html").forward(request, response);     //response.sendRedirect("");
}这里,我们体会到了:springmvc他是建立在servlet之上的,所以在servlet中能够做到的,同样在springmvc一样有效。3. 返回JSON格式返回JSON格式在SpringMVC中有多种处理方式,一种是使用SpirngMVC自带的 MappingJackson2JsonView 来处理,一种是自己写代码将返回值JSON格式化,然后直接用PrintWrite类型的对象写出就行了。1)直接用PrintWrite类型的对象写出JSON格式
@RequiresRoles(value={"student"})
@RequestMapping(value="/queryScoreForStudent")
public void queryScoreForStudent(ScoreQueryParam param, HttpSession sesion, PrintWriter printWriter){
Student student = (Student)sesion.getAttribute(ConstantConfig.LONGIN_STUDENT);
param.setStudentId(student.getId());
PageBean&StudentScore& scoreList = this.studentCourseService.queryScoreForStudent(param);
if(scoreList != null && scoreList.getSize() & 0){
Map&String, Object& map = new HashMap&&();
map.put("result", "ok");
map.put("data", scoreList);
printWriter.write(JSON.toJSONString(map));
}如上代码所示,我们在方法中加入了 PrintWriter printWriter 参数,最后的返回结果使用了fastjson库来格式化最后的返回的对象map. 然后使用printWriter写出,就行了。我们看到方法上的注解并没有使用 @ResponseBody. 当然最好这里是在方法上加上 @ResponseBody,但是因为返回的map已经是JSON格式的,所以并不需要配置 MappingJackson2JsonView !2)使用MappingJackson2JsonView 配合@ResponseBody来返回JSON格式首先需要进行相关的视图解析器的配置:
&bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"&
&property name="mediaTypes"&
&entry key="atom" value="/atom+xml"/&
&entry key="html" value="text/html"/&
&entry key="json" value="application/json"/&
&/property&
&property name="viewResolvers"&
&!-- &bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/& --&
&bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"&
&property name="prefix" value="/"/&
&property name="suffix" value=".jsp"/&
&/property&
&property name="defaultViews"&
&bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" /&
&/property&
&/bean&这里用到了 ContentNegotiatingViewResolver ,&内容协商视图解析器&,其实就是根据返回什么类型的视图,就协商使用哪种视图解析器。如果返回jsp就使用InternalResourceViewResolver视图解析器,如果返回JSON格式就使用MappingJackson2JsonView来处理。如此而已。在 &property name="viewResolvers"& 下的&list& 标签下,还可以加入其他的各种视图解析器的配置。配置了MappingJackson2JsonView 之后,就没有必要在自己手动 JSON格式化了,上面的例子,可以改成:
@RequiresRoles(value={"student"})
@RequestMapping(value="/queryScoreForStudent")
@ResponseBody
public Map&String, Object& queryScoreForStudent(ScoreQueryParam param, HttpSession sesion){
Student student = (Student)sesion.getAttribute(ConstantConfig.LONGIN_STUDENT);
param.setStudentId(student.getId());
PageBean&StudentScore& scoreList = this.studentCourseService.queryScoreForStudent(param);
System.out.println(JSON.toJSONString(scoreList));
if(scoreList != null && scoreList.getSize() & 0){
Map&String, Object& map = new HashMap&&();
map.put("result", "ok");
map.put("data", scoreList);
}其他格式Velocity, FreeMarker, XML, PDF, Excel等视图的处理,后面有时间在补上。
优质网站模板

我要回帖

更多关于 梦幻手游霸屏留言 的文章

 

随机推荐