admin 管理员组

文章数量: 1087135


2024年1月15日发(作者:undergraduate形容词)

项目:ht为了防止tp:/和谐/请去掉m/share/汉字link?shareid=446316952&uk=672642110

2014年12月9日星期二(jfinal)

今天是第一天入职,学习jfinal

从表中可以看出, JFinal访问一个确切的Action(Action定义见3.2节)需要使用controllerKey与 method 来精确定位,当 method 省略时默认值为 index。urlPara 是为了能在 url 中携带参数值,urlPara 可以在一次请求中同时携带多个值,JFinal 默认使用减号“-”来分隔多个值(可通过 constants. setUrlParaSeparator(String)设置分隔符) ,在 Controller

中可以通过 getPara(int index)分别取出这些值。controllerKey、method、urlPara这三部分必须使用正斜杠“/”分隔。

注意,controllerKey 自身也可以包含正斜杠“/” ,如“/admin/article” ,这样实质上实现了struts2的namespace功能。

记忆技巧: 第一个参数为 String 类型的将获取表单或 url 中问号挂参的域值。第一个参数为 int 或无参数的将获取 urlPara 中的参数值。

2014年12月10日星期三

1.注意打字质量,几次打错字而出错!

2.理清逻辑思路,居然出现没有配置

3.对陌生的质疑使我畏葸不前,要自信!

1.关于add

1.首先,页面是添加

姓名:

name="tname"/>${studentnameMsg!}${studentnameLMsg!}

2.到

jfinal

/*

jfinal

Filter

configClass

onfig

3.到demonconfig

/**

* 配置路由

*/

public void configRoute(Routes me) {

}

("/", );

("/student", );

//("/classes", );

4.到StudentController的save方法

@Before()

public void save() {

}

Student student = getModel();

();

forwardAction("/student");

5.被StudentValidator拦截

protected void validate(Controller c) {

// 验证表单域name,返回信息key,返回信息value

validateRequiredString("tname",

"studentnameMsg", "请输入学生名册");

这里也可以用正则验证!validateRegex(field, regExpression, errorKey,

errorMessage)

}

6.反馈

7.转回/student,无参调用index()方法

@Before()

public void index() {

}

List list = ("select * from student");

n(list);

setAttr("studentList", list);

render("/");

8.被StudentInterceptor拦截

public class StudentInterceptor implements Interceptor {

public void intercept(ActionInvocation ai) {

n("Before action invoking");

();

n("After action invoking");

}

}

9.执行后

render("/");

10.到index页面

<#list studentList as student>

${tname}

${tage}

${tsex}

${sses().classesname}

删除

修改

2.关于delete

1.在页面传值

删除

2.同添加一样,转到StudentController的delete方法

public void delete() {

}

//获取表单域名为studentID的值

//ById(getPara("studentID"));

//获取url请求中第一个值

ById(getParaToInt());

forwardAction("/student");

3.关于update

1.页面传值

修改

2.同添加一样,转到StudentController的get方法

public void get() {

}

Student student = Id(getParaToInt());

setAttr("student", student);

render("/");

3.转到index2,提取修改的内容

value="${tid}"/>

姓名:

value="${tname}"/>


年龄:

value="${tage}"/>


性别:

value="${tsex}"/>


班级:

value="${sid}" />


4.提交到StudentController的update()方法

public void update() {

}

Student student = getModel();

();

forwardAction("/student");

4.设置view视图为JSP

public void configConstant(Constants me) {

Mode(true);

wType();

}

5.访问路径,同struts的命名空间

/**

* 配置路由

*/

public void configRoute(Routes me) {

}

("/", );

("/student", );

//("/classes", );

注解ActionKey(“/add”)将打破原有路由,可以直接访问/add,而不是/student/add

@ActionKey("/add")

public void add() {

}

render("/");

2014年12月11日星期四

使用jfinal放到tomcat运行出错!

pse中tomcat启动错误;原因是没有为tomcat配置JDK

2.在发布的项目里要写绝对路径,不然出现资源找不到错误

1.开始使用jfinal自带服务是这样的

添加

2.删掉自带服务,放进tomcat后要配置路径

添加

3.需要在config里配置上下文路径

public void configHandler(Handlers me) {

(new ContextPathHandler("contextPath"));//设置上下文路径

}

3.对映射路径的理解

在访问index()方法时,里面可以使用render系列方法,这时候就要考虑到路径的问题。上面这两条看的时候不注意,在项目实践中发现大有问题。加“/”表示绝对路径,就要写全以webroot为根的路径,“/”就是代表webroot,如果下面有个student文件夹,则访问student的里面的就要render(“/student/”);而第一列则表示相对所映射路径的位置,这个映射路径是在rout路由里面配置

public void configRoute(Routes me) {

}

n("这里进入到config路由");

("/", );

("/student", );

前面一个参数表示映射到的路径,这样添加映射的结果就是我可以直接访问该映射路径下的文件了,因此,我可以直接render(“”);注意:千万不要加”/”

4.页面列表显示

5.页面中重复元素提取

当页面出现重复的元素的时候,比如添加和修改有共同的部分

<#include "">

但要求要重新设置编码,设置为utf-8,设置长度和大小防止有人捣乱

6.更新出错

没有主键,应当如下设置

7.分页

1.后台是这样的

String sql = "from t_user order by id desc";

int pageNum = getParaToInt("pageNum", 1);//默认值是1

setAttr("pageNum", pageNum);

setAttr("objectlist",te(pageNum, 2, "select *",

render("");//即这里可省略

sql));

2.前台显示是这样的

<#list as user>

${}

${me}

${me}

${}

${s}

删除

修改

当前第${pageNum}页,总共:${ow}条,总共:${age}页

关键是这里,是因为分页又是一个list,再次取出来,

关于分页的源码来自/record/

修改后

<#list t() as user>

${}

${me}

${me}

${}

${s}

href="${contextPath}/user/delteById/${}">删除

href="${contextPath}/user/queryUserById/${}">修改

当前第${mber}页,总共:${ow}条,总共:${age}页

<#include "/common/_" />

<@paginate currentPage=mber

totalPage=age actionUrl="${contextPath}/user/" />

/**

* 查询所有

*/

public void index(){//假如页面和方法一致,默认跳到方法名为名称的页面

setAttr("userPage", te(getParaToInt(0, 1), 5));

}

private static final long serialVersionUID = 1L;

public static User dao = new User();

/**

* 所有 sql 写在 Model 或 Service 中,不要写在 Controller 中,养成好习惯,public class User extends Model {

有利于大型项目的开发与维护

*/

}

public Page paginate(int pageNumber, int pageSize) {

}

return paginate(pageNumber, pageSize, "select *", "from t_user

order by id asc");

8.拦截器

全局拦截器

这个要配置在config里面

public void configInterceptor(Interceptors me) {

}

(new GlobalTestInterceptor());

llerInterceptor

@Before()

public class InterceptorController extends Controller{

Interceptor

@Before()

public void index(){

}

n("这是中间执行方法");

renderText("success");

4.拦截效果

5.清除拦截器

1)清除上一级

@ClearInterceptor//清除上一级拦截器(Controller级别)

public void destroyControllerInterceptor(){

}

n("这是清除上一级之后的");

renderText("successful");

清除效果

2)清除多级

@ClearInterceptor()//清除上一级拦截器(Controller级别)

public void destroyAllInterceptor(){

}

n("这是清除多级之后的");

renderText("successfully");

清除效果

6.拦截器栈

更高级的拦截,Handler

public void configHandler(Handlers me) {

(new FakeStaticHandler());

/**设置网站基本参数**/

(new EnterParaHandler());

/**设置访问监控**/

//(new VisitLogHandler());

}

当web请求发出后,Handler首先接管请求,然后才是拦截器。因此,可以在这里进行路径拦截设置。

9.事物

2014年12月12日星期五

tor校验器

1.在页面上的显示

用户名称:

value="${(me)!''}" maxlength="20"

size="50"/>${(userNameMsg)!'此字段不能为空'}

真实姓名:

value="${(me)!''}" maxlength="20"

size="50"/>${(realNameMsg)!'此字段不能为空'}

此字段不能为空---这是在开始的时候显示的内容,如果不写,则不显示内容,出错了显示

2.在后台拦截

/**

* 处理增加记录的方法

*/

@Before()

public void doAddUser(){

}

User user = getModel();//可以加一个参数取别名

("userpass", "123456");

boolean flag = ();

if(flag){

redirect("/user/");

renderText("Sorry,save failure");

}else{

}

3.进入校验器拦截

public class UserValidator extends Validator{

/**

* 错误处理

*/

protected void handleError(Controller c) {

String actionKey = getActionKey();

String view = null;

del();// 保存上一次提交时候的表单记录

if ("/user/doAddUser".equals(actionKey)) {

// 这个ActionKey表示添加记录 操作

view = "";

}

if ("/user/updateUser".equals(actionKey)) {

}

}

n("zhelisssssssss");

view = "";

(view);

/**

* 校验方法

*/

protected void validate(Controller c) {

/**

* 编写校验规则

*/

validateRequired("me", "userNameMsg", "用户名不能为空!!validateRequired("me", "realNameMsg", "真实姓名不能为

");

空!!");

}

}

在这里有这样的问题

视频里是1.4,里面加了trim(),而1.8去掉了:迪哥说可以再外面调用前就trim

2.上传文件

恶心了一下午,原来是没有导包1.前台表单

文件上传jfinal

enctype="multipart/form-data">//这里



//这里

2.后台处理

/** 处理文件上传 */

public void doUpload() {

UploadFile uf = getFile("filename","test/");

String title = getPara("title");//平时可以接到参数,但这里是null,要//接收文件上传的一个方法,放到test目录下如何获取带文件上传的表单的非文件元素数据

先getFile

renderText("upload successful");

}

3.设置文件目录(如果不设置,默认在tomcat部署的项目下的upload目录下,但会请空)

/** 配置常量 */

public void configConstant(Constants me) {

loadPropertyFile("a_little_");

Mode(getPropertyToBoolean("devMode", true));

wType(_MARKER);

oadedFileSaveDirectory("D:apache-tomcat-6.0.41apache}

-tomcat-6.0.41webappsjfinaldemo_upload");


本文标签: 设置 路径 方法