• 3.12 keep 系方法
    • 1、keepPara
    • 2、keepModel 与 keepBean

    3.12 keep 系方法

    1、keepPara

    当页面提交表单请求到 action,如果提交过来的数据存在错误或者缺失,这时应该让用户继续修改或填写表单数据,这时可以使用 keepPara 方法将用户之前填写过的内容保持住:

    1. // 保持住所有表单域
    2. keepPara()
    3.  
    4. //指定保持住的表单域,如: nickName、email 等等
    5. keepPara("nickName", "email", ...);

    如上,不带参的 keepPara() 方法将保持住所有表单域的内容。以上两种用法保持住的参数返回页面时,无论是什么类型都将转换成 String 类型,所以,如果表单域的类型必须要保持住的话可以使用如下的方式:

    1. // 指定 keep 后的类型为 Date
    2. keepPara(Date.class, "createAt");
    3.  
    4. // 指定 keep 后的类型为 Integer
    5. keepPara(Integer.class, "age");

    由于上面的 createAt、age 两个表单域 keep 时指定了类型,所以在页中就可以利用其类型参与表达式求值,例如:

    1. // 由于前面代码 keep 时指定 createAT 为 Date,所以 #date(...) 指令输出时不会抛异常
    2. #date(createAt)
    3.  
    4. // 由于前面代码 keep 时指定 age 类型为 Integer,所以才可以进行 age > 18 操作
    5. #if (age > 18)
    6. ...
    7. #end

    当然,如果类型为 Integer、Long、Float、Double、Byte、Short、String,还可以使用 enjoy 的 extension method 来解决类型问题,例如:

    1. #if (age.toInt() > 18)
    2. ...
    3. #end

    如上所示,age 被 keepPara() 后为 String 型,那么 age.toInt() 会将其转化成 Integer 型。extension method 更多文档请见:https://www.jfinal.com/doc/6-9

    keepPara 一般用在 Validator 或者拦截器之中,在本站首页右侧可以下载 jfinal demo for maven,里面有实际的例子。

    2、keepModel 与 keepBean

    keepModel 可以将以 modelName 前缀的表单域保持住内容与类型,例如:

    1. <input name="blog.title" value="#(blog.title ??)"/>
    2. <input name="blog.content" value="#(blog.content ??)" />

    如上所示,表单域是以前缀为 blog 的 model,提交到后端是通过 getModel 来接收数据,如果提交的数据不完整或者有错误可以使用 keepModel 保持住内容返回给页面,让用户继续填写。

    keepBean 与 keepModel 的功能相似,只不过 keepBean 针对的是传统 java bean,而不是 Model。当然,如果 Model 使用生成器生成了 setter 方法,使用 keepBean 也可以。

    注意:keepModel 与 keepBean 都可以 keep 住表单域原有的类型,无需指定类型。