【问题标题】:Spring Mvc ModelAttribute with containing class reference not working?包含类引用的 Spring Mvc ModelAttribute 不起作用?
【发布时间】:2014-06-04 12:50:16
【问题描述】:

我想在同一个控制器中创建不同的@Entity 实体。

public class ContentContainer {

public Object content;

public ContentContainer(){}

public ContentContainer(Object object){
    setContent(object);
}

public Object getContent() {
    return content;
}

public void setContent(Object content) {
    this.content = content;
}

}

控制器方法

@RequestMapping(value="create", method=RequestMethod.GET)
public String  GET(Model model) throws InstantiationException, IllegalAccessException {

Class<?> clazz = ????; // a Random POJO is chosen, i want to use POJOs!!
Object object = clazz.newInstance();

model.addAttribute("mymodel", new ContentContainer(object));

return "create";        
}

@RequestMapping(value="create", method=RequestMethod.POST)
public @ResponseBody Object POST(@ModelAttribute(value="mymodel") ContentContainer cc) {
    Object object = cc.getContent();
    // object == NULL but why??
    return object;
}

Thymeleaf 页面,正如另一条评论中所要求的那样。 这就是我发布这个的原因 多一点 文本 所以我可以发帖 此附加信息 不知道 为什么这是必要的。 请原谅我。 但这必须做 遵守规则。

<head>
<title th:text="${title}">Entity create</title>
</head>
<body>


 <form action="#" th:object="${mymodel}" th:action="@{${url}}"  method="post">
<fieldset>

<table class="table table-striped">

    <thead>
    <tr>
        <th style="width: 150px;">Fieldname</th>
        <th style="width: 150px;">Input</th>
    </tr>
    </thead>

    <tbody>
    <tr th:each="v : ${values}">

        <td><label th:for="${v}" th:text="${v}">Fieldname: </label></td>
        <td><input type="text" th:field="*{__${v}__}" /></td>

    </tr>
    </tbody>
</table>

     <div class="submit">
         <button type="submit" name="create" th:text="#{entity.create}">Create</button>
     </div>

 </fieldset>

</form>

</body>
</html>

在 Post 方法中,我得到 NULL 的 getContent

我错过了什么?

【问题讨论】:

  • 和你的其他问题一样,这里是stackoverflow.com/questions/24031858/…
  • 但是我怎样才能实现它,我可以多次打开同一个页面而不会在不同的站点请求之间交换或共享会话? (如果我打开多个标签到同一个 url,但我会将不同的参数传递给 url)
  • 请阅读我给出的2个解决方案的答案!
  • @ModelAttribute 也不起作用,如果我只使用 Session 将 pojo 的更改发送到控制器,我不喜欢处理它
  • 为什么这不起作用,该方法在每个方法之前执行,如果命名属性可用,则应该使用它。

标签: spring model controller


【解决方案1】:

我刚刚测试了你的东西。

在我的 JSP 中:

<form:form method="POST" action="./index.do" modelAttribute="testObject">
    <h1>test for object </h1>
    <table>
        <tbody>
            <tr>
                <td><form:input path="object"/></td>
                <td><input type="submit" value="test Object"/></td>
            </tr>
        </tbody>
    </table>
</form:form>

而我的testObject 和你的ContentContainer 类似

当我调试时,我发现无论我在获取此页面的GET 方法中给出了什么,container 返回的POST 方法中包含的object 始终是String 类型.

您能否发布您的JSP,因为在我的测试中没有convertnull 错误,可能是您的JSP 关于modelAttribute 的问题。

【讨论】:

  • String 总是有效的,就像所有原始类型一样,但类类型不起作用
  • JSP 页面是什么样的?我没有得到 null,但我认为 spring 不能转换对象。
  • 查看编辑,这是一个thymeleaf页面,spring的转换器会自动添加到spring发布的spring-thymeleaf jar中
  • @user2000811 嘿伙计,有什么新东西吗?
  • *{__${v}__},这个绑定值到哪个属性?
猜你喜欢
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-10
  • 2013-09-09
  • 1970-01-01
  • 2019-11-26
  • 1970-01-01
相关资源
最近更新 更多