首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >共济会-选择选项未保存

共济会-选择选项未保存
EN

Stack Overflow用户
提问于 2014-09-10 22:01:32
回答 1查看 2K关注 0票数 0

我的ftl文件中有一个表单,其中一部分是选择:

代码语言:javascript
复制
 <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中,我没有使用。

EN

Stack Overflow用户

回答已采纳

发布于 2014-09-11 08:18:28

让我们建立一个共同点:

首先,创建一个POJO来保存窗体的信息。

代码语言:javascript
复制
public class Foo {
   private String bar;
   // public getter and setter ommitted
} 

现在,在Spring控制器中,将要绑定到Spring模型的实例。这是通过使用@ModelAttribute注释一个方法来实现的,该方法返回所需的实例。通常,您将从数据库中读取表单的当前值--为了简洁起见,我只是在这里创建一个新的模型实例:

代码语言:javascript
复制
@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现在将使用名称Foofoo实例放入它的模型中。您可以通过为您的@ModelAttribute注释指定另一个值来更改该名称。

接下来,向控制器添加一个@RequestMapping方法,该方法将转发到您的Freemarker视图:

代码语言:javascript
复制
@Controller
public class MyController {

   ....

   @RequestMapping("/request/path/")
   public String process() {
     return "mytemplate";
   }

}

最后,在模板中使用Spring的FreeMarker宏呈现一个表单,其中包括您的选择:

代码语言:javascript
复制
<#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中的实例名称匹配,在我们的例子中:

代码语言:javascript
复制
@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";
   }

}

沃伊拉

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25775788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档