当前位置: 代码迷 >> JavaScript >> Spring Json View之高速开始(一)
  详细解决方案

Spring Json View之高速开始(一)

热度:308   发布时间:2012-10-25 10:58:58.0
Spring Json View之快速开始(一)

快速开始-用Controller-Interface提交Get请求

?

Spring中不支持控制器接口的验证或绑定。它却能容易地处理来自Get方式的请求。

?

这个示例在Controller中仅仅返回一个Model-MapJson字符串,没有包含错误或者格式转换。

?

下面显示了创建一个简单的Json GET 控制器的所有代码。

?

Spring ApplicationContext

?

<beans>
<bean name="simpleJsonGetController"
   class="org.thing.spring.json.controller.SimpleJsonGetController"/>
<bean name="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/hello.json">simpleJsonGetController</prop>
</props>
</property>
</bean>
<bean name="viewResolver"
class="org.springframework.web.servlet.view.XmlViewResolver" />
</beans>

??

?

?

?

Spring view.xml

?

<beans>
<bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView"/>
</beans>

?

?

?

form.html

?

?

<head>

<title>
First Test Spring Json Demo
</title>

<script type="text/javascript" src="script/prototype.js"></script>
<script type="text/javascript" src="script/behaviour.js"></script>
<script type="text/javascript" src="script/behaviour-roles.js"></script>

<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"/>
</head>

<body>

<h1>Spring JSON DEMO</h1>

<h2>Spring Ajax Get (ControlerInterface)</h2>

<b>firstname : </b><span id="firstname"></span><br/>

<b>secondname : </b><span id="secondname"></span><br/>

</br>

<button id="getName">get name</button>

<button id="clearName">clear name</button><br/>

</body>

?

?

?

?

JavaScript behaviour-roles.js

?

?

var printResult = function(transport){

var result =

"Status : " + transport.status

+ "\n"

+ "\n"

+ "Json-Result:"

+ "\n" + transport.responseText;

alert(result);

};

var myrules = {

'button#getName' : function(element){

element.onclick = function(){

new Ajax.Request('hello.json', { method:'get',

onSuccess: function(transport, json){

var json = transport.responseText.evalJSON();

printResult(transport);

$('firstname').innerHTML = json.firstname;

$('secondname').innerHTML = json.secondname;

}

});

}

},

'button#clearName' : function(element){

element.onclick = function(){

$('firstname').innerHTML = '';

$('secondname').innerHTML = '';

}

}

};

Behaviour.register(myrules);

?

?

?

?

?Controller 源码

?

?

public class SimpleJsonGetController implements Controller {

public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
Map model = new HashMap();
model.put("firstname", "Peter");
model.put("secondname", "Schmitt");
return new ModelAndView("jsonView", model);
}
}

??

?

?

?

? 效果:

?? Status : 200

?Result:

?????????? {"firstname":"Peter","secondname":"Schmitt"}

?

?

快速开始- Command-Controller提交Post请求

?

?? Command-Controller提供一个完整的CommandBeanSpring对它提供校验和绑定支持。但是你必须在你的控制器类里添加校验和绑定结果。它处理简单的Post请求非常容易。这个示例在Command-Controller中仅仅返回一个Model-MapJson字符串,没有包含错误或者格式转换。

?

?

Spring ApplicationContext

?

<beans>
    <bean name="simpleJsonPostFormController"
          class="org.thing.spring.json.controller.SimpleJsonPostFormController">
            <property name="commandClass">            <value>org.thing.spring.json.controller.SpringJsonForm</value>
            </property>
    </bean>
    <bean name="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/hello.json">simpleJsonPostCommandController</prop>
           </props>
        </property>
    </bean>
    <bean name="viewResolver"
class="org.springframework.web.servlet.view.XmlViewResolver" />
</beans>

?

?Spring view.xml

<beans>
    <bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView"/>
</beans>

?

?

?

?form.html

<head>
        <title>
                First Test Spring Json Demo
        </title>
        <script type="text/javascript" src="script/prototype.js"></script>
        <script type="text/javascript" src="script/behaviour.js"></script>
        <script type="text/javascript" src="script/behaviour-roles.js"></script>
        <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"/>
</head>
<body>
        <h1>Spring JSON DEMO</h1>
        <h2>Spring Ajax Post (SimpleFormControler and CommandController)</h2>
        <form method="post" id="form">
                <input id="placeofbirth" type="text" name="placeofbirth" ><br>
                <input id="birthday" type="text" name="birthday" ><br/>
                <br/>
                <b>place of birth : </b><span id="t_placeofbirth"></span><br/>
                <b>birthday : </b><span id="t_birthday"></span><br/>       
        </form>
        <br/>
        <button id="clearData">clear name</button>
        <button id="cc_postData">send data to CommandController</button>
</body>

?

?

?

?

JavaScript behaviour-roles.js

?

var printResult = function(transport){
                var result =
                        "Status : " + transport.status
                        + "\n"
                        + "\n"
                        + "Json-Result:"
                        + "\n" + transport.responseText;
                alert(result);
};

var myrules = {
        'button#clearData' : function(element){
                element.onclick = function(){
                        $('t_placeofbirth').innerHTML = '';
                        $('t_birthday').innerHTML = '';
                        $('error').innerHTML = '';

        },
        'button#cc_postData' : function(element){
               element.onclick = function(){
                        new Ajax.Request('hello.json', {
                                method:'post',
                                parameters: $('form').serialize(false),
                                onSuccess: function(transport){
                                        var json = transport.responseText.evalJSON();
                                        printResult(transport);
                                        $('t_placeofbirth').innerHTML = json.placeofbirth;
                                        $('t_birthday').innerHTML = json.birthday;
                                        $('error').innerHTML = '';
                        },
                        onFailure: function(transport){
                                printResult(transport);
                                addErrors(transport);
                        }
                        });
                }
        }
};
Behaviour.register(myrules);

?

?

CommandBean

?

public class SpringJsonForm {

        private String placeofbirth;
        private Date birthday;
        public String getPlaceofbirth() {
                return placeofbirth;
        }
        public void setPlaceofbirth(String placeofbirth) {
                this.placeofbirth = placeofbirth;
        }
        public Date getBirthday() {
               return birthday;
        }
        public void setBirthday(Date birthday) {
                this.birthday = birthday;
        }

}

?

?

?? 控制器源码

??

public class SimpleJsonPostCommandController extends AbstractCommandController {
        @Override
        protected void initBinder(HttpServletRequest request,  
                        ServletRequestDataBinder binder) throws Exception{
                SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
                CustomDateEditor editor = new CustomDateEditor(dateFormat, true);
                binder.registerCustomEditor(Date.class, editor);
        }
        
        @Override
        protected ModelAndView handle(HttpServletRequest request,
                        HttpServletResponse response, Object command,
                        BindException exception) throws Exception {
                
                SpringJsonForm bean = (SpringJsonForm) command;
                
                ModelAndView modelAndView = new ModelAndView("jsonView");
                
                modelAndView.addObject("birthday",  bean.getBirthday());
                modelAndView.addObject("placeofbirth",  bean.getPlaceofbirth());

                return modelAndView;
        }

}

?

?

结果?

?

Status : 200

?

?Result:

?{"placeofbirth":"Sydney","birthday":"Wed Jan 30 00:00:00 GMT 2008"}

  相关解决方案