【问题标题】:Jquery dialog - based on json submitted to Spring Controller that returns a viewJquery 对话框 - 基于 json 提交给返回视图的 Spring Controller
【发布时间】:2011-08-11 09:15:39
【问题描述】:

到目前为止,我已将此代码用作我的开发基础:Ajax Simplifications from springsource

这里是 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() 语句的工作方式不同。

提前致谢。

【问题讨论】:

标签: java javascript jquery spring


【解决方案1】:

你可以试试:

在控制器中:

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

您还必须配置您的休息上下文。这是我正在使用的一个示例:

<?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>

【讨论】:

  • 仅供参考,代码来自我在一个名为 [Group-Deal-Clone][1] 的公共存储库中的 SpringMVC 3 项目,请随时下载并查看我的设置。 [1]github.com/atgheb/Group-Deal-Clone
  • 哦,另外,对于实体上的 XML,您还需要类上的 @XmlRootElement,以便 Spring 知道将其转换为 XML(不确定 JSON 是否需要)。
猜你喜欢
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 2011-09-21
相关资源
最近更新 更多