【问题标题】:How to Pass <Select> and <input> data from View to a Controller (Spring MVC)如何将 <Select> 和 <input> 数据从视图传递到控制器(Spring MVC)
【发布时间】:2015-03-27 19:28:35
【问题描述】:

你好希望一切都好,

我正在尝试传递用户在视图中填充的数据,并使用该数据执行查询。以下是 HTML 代码。注意:使用 Thymeleaf 而不是 JSP

<form class="form-horizontal" action="#" data-th-action="@{/waterquality/data/search-results}" data-th-object="${groundWater}" method="get" accept-charset="utf-8">

    <label id = "sectionLabel" style="text-align: right; width:109px">SECTION</label>
    <select id = "section" style = "height: 25px; width: 160px; color: black">
        <option data-th-replace="fragments/form-elements/ground-water-section-select-options :: ground-water-section-select-options">List of Sections</option>
    </select>

    <label id = "formationLabel" style="text-align: right; width:109px">Formation</label>
    <input type = "text" id = "formation" />

    <button type="submit" class="send_btn1" name="action" data-th-value="#{button.action.search}"   data-th-text="#{button.label.search}"  >Search</button>

</form>

按下提交按钮时,它会正确调用控制器。以下是我的控制器代码:

@Controller
@RequestMapping(value = "/waterquality/data")
public class GroundWaterSearchController {

    static Logger logger = LoggerFactory.getLogger(GroundWaterSearchController.class);

    @Autowired
    private GroundWaterService groundWaterService;

    @RequestMapping(value = {"", "/", "/search"}, method = RequestMethod.GET)
    public String showSearchForm(Model model) {

        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Date date = new Date();
        String time = dateFormat.format(date);
        model.addAttribute("time", time);

        GroundWater groundWater = new GroundWater();
        model.addAttribute("groundWater", groundWater);

        return "waterquality/data/ground-water-search";

    }


    @RequestMapping(value = {"/search-results"}, method = RequestMethod.GET)
    public String processSearch(@Valid @ModelAttribute GroundWater groundWater,
            Model model,
            @RequestParam(value = "startPostion", defaultValue = "0") Integer startPostion,) {

        List<GroundWater> groundWaters = new ArrayList<GroundWater>();
        groundWaters = groundWaterService.fetchListByNativeSqlQuery(groundWater, viewData);

        model.addAttribute("groundWaters", groundWaters);

        return "waterquality/data/ground-water-search-results";
    }
}

我希望能够将视图中的数据保存在地图或列表中,以便将数据发送到方法 fetchListByNativeSqlQuery。但是我不确定如何做到这一点。有人可以提供一个示例,说明如何将数据从 View 发送到控制器,以及从控制器发送到方法 fetchListByNativeSqlQuery。

任何帮助将不胜感激。提前致谢!

【问题讨论】:

    标签: java html spring spring-mvc


    【解决方案1】:

    要将输入从视图传递到控制器,您需要一个名称属性。例如,您需要类似:

    对于输入标签:

    <input name="formation" type="text" id="formation">
    

    对于选择,您需要为每个选项设置一个值:

    <select name="section" id="section" style="height: 25px; width: 160px; color: black">
        <option value="someValue" data-th-replace="fragments/form-elements/ground-water-section-select-options :: ground-water-section-select-options">List of Sections</option>
    </select>
    

    然后在控制器中,您可以使用@RequestParam,其值等于您在视图中指定的名称。例如:

    @RequestParam(value="section") String sectionValue, @RequestParam(value="formation") String formation
    

    据此,您应该能够根据您在 fetchListByNativeSqlQuery() 中执行的操作来制作包含数据的地图或列表。

    【讨论】:

    • 大部分是有道理的,感谢您花时间回答。问题,当您说“对于选择,您需要为每个选项设置一个值:”您是什么意思?我是否必须给每个选项一个 id 或其他东西?或者我可以给它一个名称,当我 requestParam 时,它将填充用户选择?
    • 是的,就像我在上面所做的那样。您应该给选择一个名称,然后给选项一个值。所以...价值=“someValue”。当您在控制器中调用选择的名称时,将使用此值。例如说我有 。假设用户选择了猫,那么当控制器获取“动物”时,将返回值“猫”。
    • 听起来不错!我会试一试,然后告诉你。我非常感谢您的帮助。我现在有课到 6 点,所以我会尝试一下。如果可行,我会将您的答案标记为正确。虽然对我来说看起来是正确的^_^
    猜你喜欢
    • 2021-02-19
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    相关资源
    最近更新 更多