2017-11-29 11:14

你用的是什么模板引擎,如果是JFinal模板的话,显示字段为:#(user.username)
如果是freemarker的话为:$(user.username)才能显示,另外如果你的add action为同一个的话,建议你在getRequest().getMethod()判断下是否是GET或POST请求,不然你那表单提交后,显示页面作用域都失效了,就无法显示了。

2017-11-29 10:49

所在在中国有一句,无规矩不成方圆,自然生长的固然是精、贵、美,但始终成不能茁壮成长,大规模的群体。

2017-11-29 10:46

@yjjdick1990 是的,接口提出的数据就是json格式的就好了,接口访问状态码,消息等一目了然。

2017-11-29 10:37

当下大环境下多数社区、讨论群,大家聊的内容杂乱,大部时间都是打发时间、聊八卦,在这局势下,JFinal官方首次尝试俱乐部一新概念,通过俱乐部找出新的突破口,目的是为用户提供更高质量的品质,同时也积累各方人才和资源提供更专业的服务,这就是创建俱乐部的初衷,目前具乐部讨论群,大家讨论的内容,得到好帮助效果非常好,提出问题,解答问题上更是专业,为提问者减少很多时间同时还有额外的收获,如问题排查经验等。

2017-11-26 22:58

那你检查下你js代码了,从你截图错误信息提示已经很明显了。

2017-11-26 22:53

请把错误日志公布出来,目前描述信息未能判断错误来源。

2017-11-26 22:52

这类用法的案例很多,给几个项目你参考下,
http://www.jfinal.com/project/3
https://gitee.com/dongcb678/JfinalUIB,里面有注解路由用法。

2017-11-26 22:43

你个情况,可以这么设计,每个接口,必须有三个字段如:
private String message; //信息
private int errorCode = 0;//状态码
private Object data;//显示数据
当访问接口失败或成功时,返回消息与状态码就好了 接口访问如:http://ip/test,
返回如下格式信息:{"data":null,"errorCode":0,"message":"操作成功!"},
不用response.getWriter太麻烦了。

2017-11-24 22:35

@rex_leeeee 以你需求为主,建议数据好些,可以直接通过数据下标获取参数。

2017-11-24 14:36

一般出现错误,基本上是自己在写sql没看清楚一时手快造成的,建议你细心检查下。

2017-11-24 14:34

的确极简,不用启动插件,也不用注入路由

2017-11-24 14:28

JFinal 分页是 select与from是分开的,注意下你的用法,正常是这样使用的,如: return menuDao.paginate(num, size, select.toString(), sql.toString());

2017-11-23 21:55

参考下,其次就是你看jquery是否配置对,有没有报错。

2017-11-23 21:54

给个例子你参考:package com.platform.admin.agent.user;

import com.platform.base.BaseController;
import com.platform.base.BaseValidator;
import com.jfinal.core.Controller;

/**
* 用户信息验证
* Created by sloft.com on 2016/12/12.
*/
public class AgentUserValidator extends BaseValidator {
@Override
protected void validate(Controller c) {
BaseController cc = (BaseController) c;
if ("GET".equals(cc.getRequest().getMethod())) {
return;
}

setShortCircuit(true);

switch (getActionKey()) {
case "/mbz/login":
validateRequired("username", "userNameMsg", "帐户不能为空");
// validateMobile("username", "userNameMsg", "手机格式不正确");

validateRequired("password", "passwordMsg", "密码不能为空");
// validateCaptcha("captcha", "captchaMsg", "验证码不正确");
break;
case "/admin/password":
validateRequired("password1", "password1Msg", "请输入原始密码");
validateRequired("password2", "password2Msg", "请输入新密码");
break;
case "/admin/user/pass":
validateRequired("pass1", "pass1_msg", "请输入原密码");
validateRequired("pass2", "pass2_msg", "请输入新密码");
break;
case "/admin/user/add":
validateRequired("role", "roleMsg", "请选择所属角色");
if (cc.getPara("role").equals("0")) {
addError("roleMsg", "请选择所属角色");
}

String username = cc.getPara("username");
if (AgentUserService.me.isAccountExists(username)) {
addError("usernameMsg", "该手用户已被注册,请重新输入");
}

if ("admin".equals(username) || "superadmin".equals(username) || "root".equals(username)) {
addError("usernameMsg", "该用户名为系统内置用户,请重新输入");
}

validateRequired("phone", "phoneMsg", "手机号码不能为空");
validateMobile("phone", "phoneMsg", "请输入正确的手机号码");
validateRequired("password", "passwordMsg", "密码不能为空");
validatePassword("password", "passwordMsg", "密码格式不正确,请输入由字母或者下划线组成的格式");
validateString("password", 1, 32, "passwordMsg", "密码不能超过32个字");

validateRequired("nickname", "nicknameMsg", "姓名/昵称不能为空");
validateString("nickname", 1, 32, "nicknameMsg", "昵称不能超过19个字");
break;
case "/admin/user/update":
validateRequired("role", "roleMsg", "请选择所属角色");
if (cc.getPara("role").equals("0")) {
addError("roleMsg", "请选择所属角色");
}
// validateRequired("phone", "phoneMsg", "手机号码不能为空");
// validateMobile("phone", "phoneMsg", "请输入正确的手机号");
validateRequired("password", "passwordMsg", "密码不能为空");
validatePassword("password", "passwordMsg", "密码格式不正确,请输入由字母或者下划线组成的格式");
validateString("password", 1, 32, "passwordMsg", "密码不能超过32个字");

validateRequired("nickname", "nicknameMsg", "姓名/昵称不能为空");
validateString("nickname", 1, 32, "nicknameMsg", "昵称不能超过19个字");
break;
}
}

@Override
protected void handleError(Controller c) {
c.renderJson();
}
}