我的ftl文件中有一个表单,其中一部分是选择:
<select id=”${spring.status.expression}” value=”${spring.status.expression}”>
<$assign value=(spring.status.value!””) />
<option value=”A” >A</option>
<option value=”B” >B</option>
<option value=”C” >C</option>
</select>在默认情况下,它被分配给A --什么是好的,但是当我单击选项B,然后单击submit,B将不再被选中,因为它将被赋值A。我在堆栈溢出上看到了一些答案,但在php中,我没有使用。
发布于 2014-09-11 08:18:28
让我们建立一个共同点:
首先,创建一个POJO来保存窗体的信息。
public class Foo {
private String bar;
// public getter and setter ommitted
} 现在,在Spring控制器中,将要绑定到Spring模型的实例。这是通过使用@ModelAttribute注释一个方法来实现的,该方法返回所需的实例。通常,您将从数据库中读取表单的当前值--为了简洁起见,我只是在这里创建一个新的模型实例:
@Controller
public class MyController {
@ModelAttribute
public Foo readFooFromDB() {
// read the current option from the DB or simply create a default option here
Foo f = new Foo();
f.setBar("B");
return f;
}
}Spring现在将使用名称Foo将foo实例放入它的模型中。您可以通过为您的@ModelAttribute注释指定另一个值来更改该名称。
接下来,向控制器添加一个@RequestMapping方法,该方法将转发到您的Freemarker视图:
@Controller
public class MyController {
....
@RequestMapping("/request/path/")
public String process() {
return "mytemplate";
}
}最后,在模板中使用Spring的FreeMarker宏呈现一个表单,其中包括您的选择:
<#import "spring.ftl" as spring />
<form action="/request/path/">
<#assign options = { "A": "Option A", "B": "Option B", "C": "Option C" } />
<@spring.formSingleSelect path="foo.bar" options />
<input type="submit" value="Send" />
</form>表单现在应该将Foo实例的当前值(在本例中为“B”)呈现为所选选项。
到现在为止还好。最后一步(最初要求的那个步骤):如果提交表单,Spring应该将提交的bar值绑定到foo实例。要实现这一点,只需将实例作为参数添加到请求方法中,并再次使用@ModelAttribute对其进行注释。请注意,参数的名称在这里很重要,并且必须与Spring的模型- foo中的实例名称匹配,在我们的例子中:
@Controller
public class MyController {
....
@RequestMapping("/request/path/")
public String process(
@ModelAttribute Foo foo) { // Binds all submitted request params to matching properties of your foo instance
// validate your foo instance and probably save it in a DB
return "mytemplate";
}
}沃伊拉
https://stackoverflow.com/questions/25775788
复制相似问题