发表于: 2019-04-09 21:57:37
2 572
继续处理昨天的bug
今天为了减少干扰,我重写了一个简单版的json-taglib
这是我构建的项目结构,只有几个必须的模快controller、model、资源文件以及web页面jsp。
model模块的Test是实体类,定义了我们要写的一些数据类型及名称。
package com.jnshu.model;
public class Test {
private long id;
private String name;
private Integer age;
private String address;
public Test(long id,String name,Integer age,String address){
this.id=id;
this.name=name;
this.age=age;
this.address=address;
}
}
controller代码:
package com.jnshu.controller;
import com.jnshu.model.Test;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.ArrayList;
import java.util.List;
@Controller
public class ControllerTest {
int code;
String message;
@RequestMapping(value = "/Json")//url路径
//在放回方法上添加ResponseBody可实现对象自动转换json格式
// @ResponseBody
public ModelAndView getJsp(){
code=1;
message="成功";
System.out.println("1111111111111111111111111111");
List<Test> tests = new ArrayList<>();
Test test1=new Test(1,"小王",25,"武汉");
tests.add(test1);
ModelAndView modelAndView = new ModelAndView("Json","tests",tests);
modelAndView.addObject("code",code);
modelAndView.addObject("message",message);
return modelAndView;
}
}
web.xml是前端控制器DispatcherServlet的承载处
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:ServletContext.xml</param-value>
</context-param>
<!--前端控制器DispatcherServlet-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:ServletContext.xml</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<!--控制器的映射器-->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
然后是前端控制器的初始化参数配置文件ServletContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--自动注册RequestMappingHandlerMapping和RequestMappingHandlerAdapter-->
<mvc:annotation-driven/>
<!--注解扫描,属性是指定扫描的包-->
<context:component-scan base-package="com.jnshu.controller">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--视图解析器-->
<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>
</beans>
log4j日志资源文件就不赘述了。最后一个页面文件Json.jsp
<%@ taglib prefix="json" uri="http://www.atg.com/taglibs/json" %>
<%--<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>--%>
<%--zhushidiaole
Created by IntelliJ IDEA.
User: xu_ha
Date: 2019/4/2
Time: 21:53
To change this template use File | Settings | File Templates.
--%>
<%@page contentType="text/html;charset=utf-8" language="java" %>
<json:object>
<json:property name="code" value="${code}"/>
<json:property name="message" value="${message}"/>
<json:array name="JsonTest" var="item" items="${tests}">
<json:object>
<json:property name="id" value="${item.id}"/>
<json:property name="name" value="${item.name}"/>
<json:property name="age" value="${item.age}"/>
<json:property name="address" value="${item.address}"/>
</json:object>
</json:array>
</json:object>
正常来讲,这样我们就可以用json生成假数据了,可是我用容器装载程序运行后却却是下图样子:
页面是加载过去了,然而写在controller里的数据却都没有在页面中显示,也就是说jsp文件并没有读取到占位符内字符所代表的字符串。
jsp页面中的json属性value“Cannot resolve property or method”无法解析属性和方法。
jsp页面中的json属性value无法解析属性解决了,原因是之前在model中没有添加get方法,导致jsp的var无法获取字段属性。
同时我把controller中的URL地址做了调整,不再与jsp文件同名,再尝试一下是否能在页面中显示json数据
依然无法将对象中的数据导入到页面中去...到底是哪里处理问题....
终于找到原因所在了......
<%@ taglib prefix="json" uri="http://www.atg.com/taglibs/json" %>
<%--<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>--%>
<%--zhushidiaole
Created by IntelliJ IDEA.
User: xu_ha
Date: 2019/4/2
Time: 21:53
To change this template use File | Settings | File Templates.
--%>
<%@page contentType="text/html;charset=utf-8" language="java" %>
<%@page isELIgnored="false" %>
<json:object>
<json:property name="code" value="${code}"/>
<json:property name="message" value="${message}"/>
<json:array name="JsonTest" var="item" items="${tests}">
<json:object>
<json:property name="id" value="${item.id}"/>
<json:property name="name" value="${item.name}"/>
<json:property name="age" value="${item.age}"/>
<json:property name="address" value="${item.address}"/>
</json:object>
</json:array>
</json:object>
将约束添加上去
在postman中的样子
今日完成:直接返回JSP,直接用Json Tag-lib 生成假数据,用Postman测试接口
今日问题:已解决
明日计划:在服务器开发环境部署Resin,用"document-directory"的方式配置好War包
评论