当只有一个字符串要传递给控制器时,使用modelAttribute=“”标记和path=“”标记对我来说没有意义。然而,当一个表单有多个文本框时,为它们建立一个对象模型是有意义的。这样,modelAttribute标记表示对象,即“Employee”,路径标记表示字段,即“firstName”、“lastName”、“salary”。
当你只想传递一个字符串时,你会怎么做?我不应该创建一个带有“Key”字段的“Key”类,其中包含getKey()和setKey(),或者任何类似的疯狂行为,只是为了将字符串传递给控制器方法,对吗?在这种情况下,公约是什么?
如果我只是做模型。addAttribute(“key”,”)
当页面加载时,我得到:
org.springframework.beans.NotReadablePropertyException: Invalid property 'key'
of bean class [java.lang.String]: Bean property 'key' is not readable or has an invalid
getter method: Does the return type of the getter match the parameter type of the setter?
如果我删除模型属性="key"标签,我得到:
java.lang.IllegalStateException: Neither BindingResult nor plain target object for
bean name 'command' available as request attribute
JSP
<form:form method="post" action="myAction" modelAttribute="key">
<td>
<form:input path="key" value="${myValue}"/>
<input type="submit" value="Submit"/>
</td>
</form:form>
控制器
@RequestMapping(value = "/myAction", method = RequestMethod.POST)
public String handleMyActionRequest(@ModelAttribute("key") String key, Model model) {
// do stuff with key string.
return HOME_PAGE_REDIRECT;
}
当提交表单时,将单个字符串传递给控制器方法而不必创建新类的约定是什么?
我刚想到这个主意,但我真的不知道一般来说是否可取。毕竟,这只是一个你想要避免的过程的内联版本。不管怎样,我说:
在备份bean中,向模型中添加字符串,如下所示:
@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView home(Locale locale, Model model) {
Object theTempBean = new Object(){
public String key = "blahblahblah";
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
};
model.addAttribute("theTempBean", theTempBean);
String viewName = "home";
return new ModelAndView(viewName, "command", model);
}
JSP应该如下所示:
<form:form action="/myAction" modelAttribute="theTempBean">
<form:input path="key" />
<input
type="submit" value="Submit" />
</form:form>
然后,web控制器处理表单post的方法应该如下所示:
@RequestMapping(path = "/myAction")
public String myAction(@RequestParam("key") String param){
logger.info(param);
return "home";
}
我测试了这个简单的例子,它可以在Spring 4.2.0版中正常工作。发布和码头Maven插件版本9.3.2. v20150730。
编辑
有一个错误。如果您决定这样做,您必须在任何请求中设置theTempBean(也许它可以成为一个@ModelAt0016
。同样,这只是一个额外bean类的在线版本)。这是固定操作处理程序方法:
@RequestMapping(path = "/myAction")
public String myAction(@RequestParam("key") String param
, Model model){
logger.info(param);
Object theTempBean = new Object(){
public String key = param;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
};
model.addAttribute("theTempBean", theTempBean);
return jspViewName("home");
}
我正在用ASP. NET网络应用编程接口编写一个网络应用编程接口,并使用以下视图模型。当一个特定属性上有两个验证属性(即[必需的]和[字符串长度(10)])时,我似乎对数据绑定有问题。 当将JSON值从客户端发布到窗体的控制器操作时: //发布api/列表 公开作废帖子([FromBody]TaskViewModel taskVM) 我认为: 如果我删除多个属性中的一个,则所有属性都绑定OK; 如
问题内容: 我的视图模型中包含以下模型 如何从Javascript访问上述属性之一? 我尝试了这个,但是我得到了“未定义” 问题答案: 您可以通过以下操作将整个服务器端模型转换为Javascript对象: 在您的情况下,如果只需要FloorPlanSettings对象,则只需传递方法that属性:
我有一个像下面这样的家长。 而我的孩子波姆就像。 我的文件夹结构像 POM-test(根文件夹具有父pom)---child(具有子pom) 当我运行mvn clean install时,我的孩子得到了如下的异常。 为什么我不能安装这个pom?
本文向大家介绍VirtualBox的Linux虚拟机文本模式和图形模式的切换问题,包括了VirtualBox的Linux虚拟机文本模式和图形模式的切换问题的使用技巧和注意事项,需要的朋友参考一下 1.默认开机进入文本模式 如果想让开机自动进纯文本模式, 修改/etc/inittab 找到其中的 id:5:initdefault: 这行指示启动时的运行级是5,也就是图形模式 改成3就是文本模式了 i
我试图在Symfony2中创建一个表单,其中包含一个文本输入字段,该字段接受一个由6位数字组成的字符串,后跟一个破折号,后跟四位数字(例如123456-7890)。它确实可以工作,但我得到的HTML标记不一致,具体取决于我如何将字段添加到表单中。 这来自实体: 从表单定义中: 从树枝模板: 这就是浏览器源代码的样子——注意模式和maxlong属性: 我想使用我自己的标签,而不是默认的,所以我改变表
我刚刚使用一个xml配置文件将log4j转换为log4j2。一切正常,只是我似乎无法使用属性文件设置日志文件的路径。 这是一个Spring MVC应用程序,我有一个文件,位于文件夹中,以及log4j2.xml,i18n消息和其他属性文件。它有一个简单的条目:。我看过其他帖子,只是不知道如何正确配置log4j2。这是我所拥有的: 错误是: 替换实际路径有效,例如。, <代码> 我被捆绑语法的正确域部