如何从启用参数的控制器获取结果

时间:2016-08-08 04:45:31

标签: spring

这是我获取staff列表的方法。

public class StaffController {
    private static final Logger logger = LoggerFactory.getLogger(StaffController.class);

    @Inject
    private StaffService service;

    @RequestMapping(value = "/list", method = RequestMethod.GET)
    public String listAll(@Param("branchId") Integer branchId,
                      @Param("page") Integer page,
                      @Param("rowsPerPage") Integer rowsPerPage,
                      Model model,
                      HttpServletRequest request) throws Exception {
        logger.info("Staff information list page.");
        model.addAttribute("context", request.getContextPath());

        Map<String, Object> keys = new HashMap<String, Object>();
        keys.put("branchId", branchId);
        keys.put("page", page);
        keys.put("rowsPerPage", rowsPerPage);
        //List<StaffVO> list = service.listAll(1, 1, 10);
        List<StaffVO> list = service.listAll(keys);


        model.addAttribute("list", list);

        return "/staff/list";
    }
}

然后在JSP中,我得到如下结果:

<% List<StaffVO> list = (List<StaffVO>)request.getAttribute("list"); %>

好的,太好了。 但在地球上我应该传递branchIdpagerowsPerPage等参数。这样控制器就可以准确地查询我想要的内容。

目前,我只是忽略参数,只是查询所有内容,因为branchIdpagerowsPerPage都是空的。

这是我的StaffMapper:

public interface StaffMapper {

    final String SELECT_STAFF =
        "SELECT staff.id, staff_level, staff.name, cell, date_join, employment, status, allow_absence_control, branch.id as branch_id, branch.name as branch_name " +
        "FROM staff " +
        "LEFT JOIN branch " +
        "ON staff.branch_id=branch.id " +
        "WHERE branch.id=1";

    @Select(SELECT_STAFF)
    public List<StaffVO> listAll(Map<String, Object> keys) throws Exception;
}

所以,假设现在我有keys实际上有键和值。那么,如何将该信息插入SELECT字符串?

我尝试了WHERE branch.id = #{keys[branchId]}等等,但遗憾的是没有用。

1 个答案:

答案 0 :(得分:0)

如果我理解你的错误,你需要在你的控制器中获取数据。您可以通过两种方式实现这一目标:

1)@PathVariable

@RequestMapping("/foo/{bar}/{bazz}")
public String getEvent(@PathVariable Long bar,@PathVariable String bazz) {
model.addAttribute(...);
return model;
}

网址示例:

主机名:端口/富/ 2 /你好

主机名:端口/富/ 3 /再见

最后两个变量将被视为路径变量,可以在控制器中使用。

2)@RequestParam

@RequestMapping(value = "/balance", method = RequestMethod.POST)
public String addBalance( @RequestParam Double bar){
...
}

在这里你需要使用html表格,例如

<form name="foo" action="/balance" method="post">
Add money:
  <input type="number" name="bar" /></br>
  <input type="submit" value="Save" />
</form>

这将把变量放在&lt;输入&GT;请求参数。输入和控制器中的名称应该相同。

P.S。 scriptlet不是在JSP中获取数据的最佳方式。我认为将HTML和JAVA混合起来很糟糕。你应该考虑使用JSTL。