【问题标题】:How to assign a value of an input to an object that comes from controller class?如何将输入值分配给来自控制器类的对象?
【发布时间】:2020-09-22 08:21:20
【问题描述】:

我是全栈编程和开发培训项目的新手。在那之前我使用的是jsp,在那里处理这些类型的东西很容易,但现在在ftl上工作。我正在尝试将一个对象发送到模板,并希望用模板中的值填充该对象的字段。然而,模板在每次尝试中返回 null 或给出错误。 我的错是什么,或者可以在 ftl 中做到这一点吗?从现在开始谢谢你。

这是我的 Get 方法,将 DatabaseUser 对象发送到模板,

@RequestMapping(value="/createRequest.html", method= RequestMethod.GET)
public ModelAndView add() throws ServiceException {
    DatabaseUser dbUser = new DatabaseUser();
    ModelAndView mav = new ModelAndView("index");
    mav.addObject("user", dbUser);
    return mav;
}

这是一个post方法,试图获取模板的表单值并将它们分配给对象的字段。

我只想从表单输入中获取字符串,将其分配给 dbUser 对象的地址字段并将该对象发送到 save() 方法。

@RequestMapping(value="/saveRequest.html", method=RequestMethod.POST)
public ModelAndView save(@ModelAttribute("user") DatabaseUser dbUser,
                         BindingResult bindingResult) throws ServiceException{
    if(bindingResult.hasErrors()){
        LOGGER.debug("Binding error count: " + bindingResult.getErrorCount());
    }
    if(dbUser.getBaseUser.getUserId()==0){
        BaseUser baseUser = new BaseUser();
        baseUser.setAddres(dbUser.getBaseUser().getAddress());
        baseUser.setEmail(dbUser.getBaseUser().getEmail());
    }
    return add();

以及我的 ftl 文件中试图满足这种情况的部分:

<div class="row">
    <div class="col-sm-12 col-lg-6">
        <form action="<@spring.url '/saveRequest.html' />"
             modelAttribute="user" method="post" id="form3">
             <input type="hidden" name="user" value="user"/>
<div class="form-group">
    <label for="address"><@spring.message "translationrequest.documentNumber" /></label>
    <input type="text" id="address" name="address" class="form-control"
          maxlength="250" value="${(getBaseuser().setAddress())!}"/>
</div>

【问题讨论】:

    标签: java spring freemarker


    【解决方案1】:

    以下是我在您的代码中注意到的内容:

    请求映射映射此控制器的 REST url,因此您需要将其修复为:

    @RequestMapping(value="/save", method=RequestMethod.POST)
    

    然后确保您的表单在用户提交时点击它:

    <form action="<@spring.url '/save' />"
    

    注意:表单没有 closign 标签&lt;/form&gt;。请在第二个输入字段后添加。

    您只有一个绑定到地址的输入字段,因此您不会在baseUser.setEmail(dbUser.getBaseUser().getEmail()); 这一行中填充电子邮件字段,这会将其设置为空。

    您的代码所做的是创建新的DatabaseUser 并将其发送到索引页面。 然后它构造这个 HTML 表单,地址字段显示 ${(getBaseuser().setAddress())!} 的值,如果您的 new BaseUser() 没有在地址中设置值,您将看不到任何显示的地址。

    我建议您提供 DatabaseUser 类,以便我提供有效的答案。

    【讨论】:

      猜你喜欢
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      • 2010-11-27
      相关资源
      最近更新 更多