如何在Spring中将模型属性从Controller传递给Controller?

时间:2017-03-06 08:32:02

标签: spring spring-mvc

我正在Spring MVC中创建一个项目来接受反馈表单。我接受用户值,即姓名,电子邮件,电话和电话; 'home.jsp'页面中的评论。然后我将这些值传递给控制器​​'反馈',然后我想将这些值传递给另一个控制器'feedback2',然后最后传递给'admin_panel.jsp。我应该如何在控制器之间传递值?

我接受用户名,即姓名,电子邮件,电话和电话; 'home.jsp'页面中的评论

针对home.jsp

<manifest ...>
...
<application ...>
  <activity android:name="javafxports.android.FXActivity"
            android:label="Sample"
            android:launchMode="singleTop"
            android:configChanges="orientation|screenSize">
    <meta-data android:name="main.class" android:value="com.sample.Main"/>
    ...
  </activity>
  ...
  <activity android:name="com.gluonhq.impl.charm.down.plugins.android.NotificationActivity"
            android:parentActivityName="javafxports.android.FXActivity">
        <meta-data android:name="android.support.PARENT_ACTIVITY" 
                   android:value="javafxports.android.FXActivity"/>
  </activity>
  <receiver android:name="com.gluonhq.impl.charm.down.plugins.android.AlarmReceiver" />
</application>

然后我将这些值传递给控制器​​'反馈',然后我想将这些值传递给另一个控制器'feedback2',最后传递给'admin_panel.jsp。

<form action="feedback" method="post">
<input type="text" name="Name" value="Name " onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Name';}" required="">
<input type="email" name="Email" value="Email" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Email';}" required="">
<input type="text" name="Phone" value="Phone" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Phone';}" required="">
<textarea type="text" name="comments" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Special Instruction/Comments...';}" required="">Special Instruction/Comments...</textarea>
<input type="submit" value="Send">
</form>

最后我在'admin_panel.jsp。

上显示值
***HomeController.java***

package com.helloworld.mvc;

import java.text.DateFormat;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

    /**
     * Simply selects the home view to render by returning its name.
     */
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model) {
        logger.info("Welcome home! The client locale is {}.", locale);

        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);

        String formattedDate = dateFormat.format(date);

        model.addAttribute("serverTime", formattedDate );

        return "home";
    }

@RequestMapping(value = "/feedback", method = RequestMethod.POST)
public String feedback(@RequestParam("Name") String Name, @RequestParam("Email") String Email, @RequestParam("Phone") String Phone, @RequestParam("comments") String textarea, Model model)
{
    model.addAttribute("Name",Name);
    model.addAttribute("Email",Email);
    model.addAttribute("Phone",Phone);
    model.addAttribute("textarea",textarea);
    return "feedback2";
}

    @RequestMapping(value = "/feedback2", method = RequestMethod.POST)
    public String feedback2(@RequestParam("Name") String Name, @RequestParam("Email") String Email, @RequestParam("Phone") String Phone, @RequestParam("comments") String textarea, Model model)
    {
        return "admin_panel.jsp";
}
}

2 个答案:

答案 0 :(得分:0)

我建议重新考虑你的设计(例如,为什么feedback2是一个ReuqetMapping而不是一个通过反馈调用的简单方法),但你可以在Spring MVC中通过returnin将#34;视图中的请求提前命名&#34;

forward:<new url>

在你的情况下

forward:/feedback2

答案 1 :(得分:0)

我只能同意@Thomas Pawlitzki已经说过的话:重新思考你的设计。我希望POST请求映射能够直接返回显示成功或错误的视图(在您的情况下为admin_panel.jsp)。

此处的另一个问题:强烈建议您不要将反馈数据映射为@RequestParam。为消息有效内容创建一个类,并将其映射为@RequestBody。您的方法签名将变得更加简单:

public String feedback(@RequestBody Feedback feedback) {...}

如果你 - 无论出于何种原因 - 需要将模型对象从一个控制器传递到另一个控制器,我建议使用flash属性。将RedirectAttributes的实例传递给您的反馈控制器,并通过redirectAttributes.addFlashAttriute(key, value)添加Flash属性。然后返回redirect:/feedback2。所有闪存属性都可用作feedback2控制器中的模型对象。