(1)登录验证 在主模块上用@Filters即可
@Filters(@By(type=CheckSession.class, args={"user", "/login.nut"})) public class MainModule { CheckSession是内置的,检查Session中是否有user变量存在,不存在则跳转到login页面。
同时,login页面对应入口函数,登录检查的入口函数, 应该使用空的Filters,否则会循环跳转页面了。 @Filters public void doLogin(... -------------------------------------------------------- (2)同一个页面,有跳转,有表单提交,如何区分。 @At("/login") public void toLogin() {..
@At("/login") @POST public void doLogin(){.. 表单提交的,加上@POST即可。 -------------------------------------------------------- (3)入口函数里如何得到session或request等等? @At("/login") @Ok("jsp:/index") @POST @Filters public void doLogin(HttpSession session) { 只要在参数里自己加HttpSession session,HttpServletRequest req这样的参数, 就自动引入了,直接使用即可 -------------------------------------------------------- (4)怎么用表单的值自动填充DTO? @At("/login") @Ok("jsp:/index") @POST @Filters public void doLogin(@Param("..") UserDto dto) { 用@Param("..")即可,很特殊的一个参数,自动按名字填充DTO的成员变量。 表单页面无需特别处理。 -------------------------------------------------------- (5)提交表单后,有错误,如何在表单页面显示。 首先在入口函数,使用@Fail,指定会表单页面。 有错误时,抛出一个异常,比如RuntimeException,然后 在表单页面: <c:if test="${obj!=null && obj.message!=null}"> <table align="center" width="600"><tr><td > <font color="red">提示信息:${obj.message}</font> </td></tr></table> </c:if> 就能显示了。 抛出异常时,会把异常放到request里,所以页面用${obj}能取到。 -------------------------------------------------------- (6)IOCBean感觉就是从json文件等构建javaBean用的, 注入的时候倒是可以注入很多东西。 在jsp里不能绑定IocBean,IOCBean和seam的组件还是不太一样的。 -------------------------------------------------------- (7)分页,在dao方法中使用Pager参数即可 记录总数要自己取一下,注意拼接条件什么的。 //查询记录总数 pager.setRecordCount(this.dao().count(User.class,Cnd.wrap(cond))); 然后返回return new QueryResult(userList, pager);就行了, 直接把结果列表和分页信息返回了
jsp页面中,${obj.list}可以得到结果列表, ${obj.pager}可以得到分页信息,它的属性有 private int pageNumber; private int pageSize; private int pageCount; private int recordCount; 拼接HTML内容就行了。 -------------------------------------------------------------- (8)list.nut?p=1&username=aaa&realname=bbb @At("/list") @Ok("jsp:/user/list") public QueryResult list(@Param("p") int pageNumber,@Param("username")String username,@Param("realname")String realname,HttpServletRequest request) { //回传表单输入 Map<String,String> itemMap = new HashMap<String,String>(); itemMap.put("username", username); itemMap.put("realname", realname); request.setAttribute("formdata", itemMap); //查询数据 return userService.getUserList(pageNumber,username,realname); } URL匹配直接用/list就行了,然后用@Param("xx")直接可以取得对应参数。 不过,解码是容器做的,目前,是固定按iso-8859-1解码的,所以结果不对。
tomcat的server.xml中增加URIEncoding和useBodyEncodingForURI就好了。 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true"/> 还是应该用Filter实现? -------------------------------------------------------------- (9)拦x截x器里取得request,可以使用HttpServletRequest request = Mvcs.getReq(); -------------------------------------------------------------- <c:forEach items='${requestScope}' var='item'> <c:out value='${item.key}' />=<c:out value='${item.value}' /> </c:forEach> <c:forEach items='${sessionScope}' var='item'> <c:out value='${item.value}' /> </c:forEach> <c:forEach items='${applicationScope}' var='item'> <c:out value='${item.value}' /> </c:forEach> -------------------------------------------------------- @Aop("txREAD_UNCOMMITTED")
|