我在我的应用程序中使用了sping3 mvc。
我有一些需要CRUD操作的实体。
查询记录时,可能需要分页,因此我创建了Pagination类:
class Pagination{
int page,
int pageSize,
String sort;
}
这是我的Dao:
public List<Post> list(Pagination pagination) {
/////
return xxx;
}
在控制器中:
@RequestMapping(value = "/", method = RequestMethod.GET)
public String list(@RequestParam int page,@RequestParam int pageSize,@RequestParam String sort) {
List<Post> posts=postDao.list(new Pagination(page,pageSize,sort));
return "";
}
现在,如果httprequest中没有page
或pageSize
参数,它将抛出typeconvert异常,事实上,我知道我可以重定向到异常页面,但我不想这样做。在这种情况下,我想使用一些默认配置,例如:
http://xx/post/list ==&gt;返回所有没有分页的记录
http://xx/post/list?page=1&pageSize=10&sort=id ==&gt;分页
http://xx/post/list?page=1 ==&gt;使用默认的pageSize(可能是10)和sort(id)
进行分页http://xx/post/list?page=notnumber&pageSize=10 ==&gt;分页与页面= 1
然后我想知道在哪里以及如何验证和重置分页参数?
答案 0 :(得分:0)
您可以将int page和pageSize的参数数据类型更改为String page和String pageSize,执行此操作后,您只需检查传递的参数值是否为null。如果参数值不为null,则使用传递的值,否则使用默认值。 像这样
@RequestMapping(value = "/", method = RequestMethod.GET)
public String list(@RequestParam String page,@RequestParam String pageSize,@RequestParam String sort) {
if(page ==null)
page=1; // assign page default value 1 because user didn't pass page value.
if(pageSize==null)
pageSize=10; // assign pageSize default value 10 because user didn't pass pageSize value.
List posts=postDao.list(new Pagination(page,pageSize,sort));
return "";
}
答案 1 :(得分:0)
您必须了解您为请求发送的参数将从String转换为int,因为如果直接接收String并调用Pagination的构造函数,则更好。
您可以使用条件指令内联或其他逻辑,直到u。 在这个方法中,你只会在被通知时调用构造函数Pagination传递请求的值,另一种方法将发送你必须放入常量的默认值。
@RequestMapping(value = "/", method = RequestMethod.GET)
public String list(@RequestParam String page, @RequestParam String pageSize, @RequestParam String sort) {
List posts = postDao.list(new Pagination(
StringUtils.isEmpty(page) ? page : "1",
StringUtils.isEmpty(pageSize) ? pageSize : "15",
StringUtils.isEmpty(sort) ? sort : "asc"));
return "";
}