博主我getModel取不到数据

我尝试了前端发送两种数据格式让后端的getModel来接收

1.[object Object]

2.{"tblog":{"id":"8","title":"ds","content":"sxs"}}

可实际什么都接收不到 这个是什么原因呀  我的form的name属性也是按照你的规范modelname点的

评论区

JFinal

2018-06-14 11:13

先看一下控制台输出的 jfinal action reporte, 其中的一栏 parameter 会输出参数

根据这一栏的输出选择相应的 get 方法具体用法看一下文档,都有实例

373118970

2018-06-14 11:45

@JFinal

辅助add方法明明进去了 但是缺没有其他方法的日志,还有就是我组长说是什么jfinal版本的原因。。。。。。


JFinal-3.4 action report -------- 2018-06-14 11:43:47 --------------------------
Url : POST /wsblog/query
Controller : com.demo.Tblog.TblogController.(TblogController.java:1)
Method : query
Parameter : sortField= sortOrder= pageSize=5 pageIndex=0
--------------------------------------------------------------------------------
add方法
{}

JFinal

2018-06-14 11:55

@373118970 情况比较明朗, 使用 getPara("sortField") getPara("sortOrder") 即可获取

373118970

2018-06-14 14:48

@JFinal getPara("")缺失可以获取到,但是并没有你发明的那个getModel方便。。 我看了我们单位的项目前端的ajax和后端的add方法都和我一样,可我这里还是取不到数据,一但请求add方法会500错误,我只是因为getModel比较方法。。要是您可以的话 能否远程我看看 要不你加下我QQ373118970

JFinal

2018-06-14 15:53

@373118970 getModel 与 getBean , 第二个参数传入空字符串,是可以支持不需要 model 前缀的:
getModel(Xxx.cllass, "", true);

如果你的 model 用 jfinal 生成器生成了 setter 方法,可以使用 getBean:
getBean(Xxx.cllass, "", true);

注意看文档

373118970

2018-06-14 16:50

@JFinal
Tblog ws = getModel(Tblog.class,"",true);
Tblog wss = getBean(Tblog.class, "", true);
你说的这两种方法我都试过,都只输出了{ }



我前端都是这么写的
然后发送给后台的数据是
$.ajax({
url: "/wsblog/add",
type: "post",
data: {data:json},
success: function (text) {
CloseWindow();
}
});

我把这个要发送的json打印出来是这样的{"id":"23","title":"sads","content":"sadas"}

我是真心不知道哪里错了

JFinal

2018-06-14 17:26

@373118970 如果控制台输出的 jfinal action report 中的 parameter 这一栏是下面的:
data = {"id":"23","title":"sads","content":"sadas"}

那么该这样获取:
String jsonStr = getPara("data");

然后再转换:
Tblog blog = FastJson.getJson().parse(jsonStr, Tblog.class);

注意,这里要引入 fastjson 的依赖

JFinal

2018-06-14 17:26

其实关键还在于你的 parameter 这一栏到底输出了什么,一定要根据输出,合理选择相应的方法

373118970

2018-06-14 17:32

@JFinal
嗯。那我这样问 如果我需要使用getModel(),那么我前端需要返回什么样子的格式给这个getModel()

JFinal

2018-06-14 17:57

@373118970 确保控制台输出的 jfinal action report 中的 parameter 这一栏的内容为如下两种格式即可:
Parameter : sortField=aaa sortOrder=bbb
Parameter : modelName.sortField=aaa modelName.sortOrder=bbb

前者的在使用时,第二个参数传 "":
getModel(Xxx.class, "",true);

后者在使用时,第二个参数传具体的前缀:
getModel(Xxx.class, "modelName",true);

这些在文档中都有实例,请不要再问这种基础性问题

JFinal

2018-06-14 18:01

@373118970 发现你在问前端的事, jfinal 是后端框架,只管到 parameter 这一栏,前端我稍微说一下:
1:正规的表单提交
2:ajax 发请求时的 data 这一栏:
data: {sortField=aaa, sortOrder=bbb}

注意第二条中的 ajax,看上去是 json 数据,但本质上仍然是表单提交类型的 key value 数据,所以后台的 parameter 这一栏仍然是 key value

JFinal

2018-06-14 18:02

站在 jfinal 的角度,不管你用什么办法,只要让 parameter 这一栏的数据正确即可,其它的问题 jfinal 无法干预到

373118970

2018-06-14 18:50

@JFinal
对的 我前端控制台输出的格式和你说的是一样的
{data: {sortField=aaa, sortOrder=bbb}} 但前端就是获取不到。,你能远程帮我看一下下吗

JFinal

2018-06-14 18:53

@373118970 {data: {sortField=aaa, sortOrder=bbb}} 这个是错误的,当然获取不到,以下 parameter 才是对的:
Parameter: sortField=aaa, sortOrder=bbb

373118970

2018-06-15 18:15

@JFinal
2:ajax 发请求时的 data 这一栏:
data: {sortField=aaa, sortOrder=bbb}

可是。。是你说格式是这个样子的 ,博主远程一下我看看吧

JFinal

2018-06-15 18:37

@373118970 jfinal 只管到控制台输出的 jfinal action report 中的 parameter 这一栏,前端的事情 jfinal 确实无法干预

我估计你弄了这么久还没搞定,很可能是你的数据库的字段与 sortFiled、sortOrder 根本对不上

jfinal 文档里面说得很清楚, getModel 要求前端的 key 值与数据库表的字段名完全一致,很多人喜欢让表字段名使用大写字母,所以我估计你得改成 SORT_FIELD、SORT_ORDER

此外, getBean 方法只关心你的 Model 的 setter 方法,不关心数据表字段的大小写问题,要特别注意看一下文档中的红色字体说的:
http://www.jfinal.com/doc/3-5

只能帮你到这里了

JFinal

2018-06-15 18:40

@373118970 我再复制一段文档你看一看:

getModel用来接收页面表单域传递过来的model对象,表单域名称以”modelName.attrName”方式命名,getModel使用的attrName必须与数据表字段名完全一样。

getBean方法用于支持传统Java Bean,包括支持使用jfinal生成器生成了getter、setter方法的Model,页面表单传参时使用与setter方法相一致的attrName,而非数据表字段名。


上面的文档可以看出,如果你数据表字段为 AAA, 对于 getModel 来说那么前端也得传大写的 AAA。

如果你使用 getBean, 如果有一个 setAaa(...) 方法,那么前端得用 aaa,也就是 setAaa 方法名去掉 set 前缀,并且将剩下的 Aaa 的第一个字母变小写即: aaa

菜鸡不配起网名

2020-10-30 10:05

楼主解决了吗,我也遇到了同样的问题

菜鸡不配起网名

2020-10-30 10:20

所以表单提交跟ajax提交还不能用同一个方法,真是操了蛋了

凉月

2020-11-14 19:57

@菜鸡不配起网名 文档里说的很清楚了

如果后端是getBean(Diary.class);这样接收的
那前端里ajax的data参数应该这样的形式
{
"diary.time": _this.getDate,
"diary.week": _this.getWeek
}
Diary.class的名称"diary.time"要加在前面.


如果ajax的打他参数是这样
{
"time": _this.getDate,
"week": _this.getWeek
}
那么后端getBean(Diary.class,"");要这样,第二个参数必须填空字符串
getModel同理

凉月

2020-11-14 20:04

@菜鸡不配起网名
如果前端里ajax的data参数应该这样的形式
{
"diary.time": _this.getDate,
"diary.week": _this.getWeek
}
后端还能public void saveDiary(Diary diary)直接这样取

热门反馈

扫码入社