Jquery对话框——基于提交给Spring Controller的json,返回一个视图

Jquery dialog - based on json submitted to Spring Controller that returns a view

本文关键字:视图 json 返回 一个 于提交 对话框 提交 Spring Jquery Controller      更新时间:2023-09-26

到目前为止,我一直使用以下代码作为开发的基础:来自springsource的Ajax简化。

这里是html &jquery和javascript代码:

<c:url var="Controller" value="/ControllerUrl" />
...
var previewDialog = $("<div></div>").dialog({
    //all the dialog setttings
});
$(".opener").click(function() {
    previewDialog.load("${Controller}",function(data) {
          previewDialog.dialog('open');
       });
       return false;
});

和控制器:

@RequestMapping(value = "/ControllerUrl", method = RequestMethod.GET)
public String previewDialog(Model model) {
    MyClass myClass = new MyClass();
        myClass.setTitle("SUCCESS");
    model.addAttribute(myClass);
    return "dialogContent";
}

这几乎都工作,除了在dialogContent.jsp(它确实在我的对话框中打开)"SUCCESS"是而不是打印的:

<div id="divContent">
Title : ${myClass.title} <br>   
</div>

我错过了什么/做错了什么?

其次,在这种情况下,向服务器提交json数据的最简单方法是什么?我尝试使用$.ajax()$.postJSON(),但遇到了问题,因为它们的工作方式与$.load()语句不同。

你可以试试:

在控制器中:

return new ModelAndView("view-name", "myclass", myClass);

在JSP中:

${myClass.title}

问题是这仍然会返回HTML而不是纯文本。

同样,你也可以通过改变你的控制器返回json或xml,如下所示:

@RequestMapping(value = "/ControllerURL", method = RequestMethod.GET, headers="Accept=application/xml, application/json")
public @ResponseBody DealManager homeXmlJson(Locale locale, Model model) {
       MyClass myClass = new MyClass();
           myClass.setTitle("SUCCESS");
    return myClass;
}

然后当你使用$.getJSON调用它时,它应该返回对象的json表示,你应该能够从中提取title

使用REST-Client之类的工具查看将不同的Accept参数传递给控制器URL时返回的内容。参数为:Accept: text/html, Accept: application/json, Accept: application/xml

您还必须配置您的rest上下文。下面是我正在使用的一个例子:

<?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:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean
        class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
    <bean
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="jsonConverter" />
                <ref bean="marshallingConverter" />
                <!-- <ref bean="atomConverter" /> -->
            </list>
        </property>
    </bean>
    <!-- Handle JSON Conversions -->
    <bean id="jsonConverter"
        class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
        <property name="supportedMediaTypes" value="application/json" />
    </bean>
    <!-- Handle XML Conversion -->
    <bean id="marshallingConverter"
        class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
        <constructor-arg ref="jaxbMarshaller" />
        <property name="supportedMediaTypes" value="application/xml" />
    </bean>
    <bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
        <property name="classesToBeBound">
            <list>
                <value>com.pack1.app.domain.MyEntity</value>
                <value>com.pack1.app.service.MyEntityTwo</value>
            </list>
        </property>
    </bean>

</beans>