[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[整理]初学nutz的一点总结

上一篇:[备忘]tomcat调整内存的一句话
下一篇:[备忘]win7 64位下,asp连接access报错的解决办法

添加日期:2015/7/14 16:40:21 快速返回   返回列表 阅读2349次
(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")
 

评论 COMMENTS
没有评论 No Comments.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved