当前位置: 首页 > 知识库问答 >
问题:

Spring JSP:Spring形式的问题,模型属性="和路径="

田瀚
2023-03-14

当只有一个字符串要传递给控制器时,使用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;
}

当提交表单时,将单个字符串传递给控制器方法而不必创建新类的约定是什么?

共有1个答案

梁浩涆
2023-03-14

我刚想到这个主意,但我真的不知道一般来说是否可取。毕竟,这只是一个你想要避免的过程的内联版本。不管怎样,我说:

在备份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

  • 我刚刚使用一个xml配置文件将log4j转换为log4j2。一切正常,只是我似乎无法使用属性文件设置日志文件的路径。 这是一个Spring MVC应用程序,我有一个文件,位于文件夹中,以及log4j2.xml,i18n消息和其他属性文件。它有一个简单的条目:。我看过其他帖子,只是不知道如何正确配置log4j2。这是我所拥有的: 错误是: 替换实际路径有效,例如。, <代码> 我被捆绑语法的正确域部

  • 我试图在Symfony2中创建一个表单,其中包含一个文本输入字段,该字段接受一个由6位数字组成的字符串,后跟一个破折号,后跟四位数字(例如123456-7890)。它确实可以工作,但我得到的HTML标记不一致,具体取决于我如何将字段添加到表单中。 这来自实体: 从表单定义中: 从树枝模板: 这就是浏览器源代码的样子——注意模式和maxlong属性: 我想使用我自己的标签,而不是默认的,所以我改变表