2020-12-23 11:42

@mr_wangyan 这个问题其实是 jfinal 之外的事情,但为了帮你省时间,jfinal 还是添加了点代码,解决了这个问题

这个问题的原因如下:
1:使用 nginx 代理 https 也就是 443 端口

2:nginx 与 jfinal 项目通信的通道并不是 443 端口,而是像你项目中用到的 1888 类似的其它端口

3:当你在 jfinal 中使用 rendirect(url) 做重定向的时候, jfinal 获取到的端口号必然只能是 1888,因为 nginx 与之通信的确用的是 1888

4:所以说 443 这个端口号对于 jfinal 项目来说是透明的,无法感知的

5:解决办法自然就出来了,通过在 nginx 中配置 proxy_set_header X-Forwarded-Port $server_port; 将 443 这个端口号通过 http 的 header 中传递过去

6:最终 jfinal 的 RediectRender 优先获取一下 X-Forwarded-Port 的值,如果获取到,那么重定向就优先使用该端口

2020-12-22 22:57

我暂且猜测你碰到的是一个重定向的问题,在 nginx 配置 proxy_pass 的同一个配置块中添加如下配置:
# 解决 https 重定时向回到了 http 的问题
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;

上面的配置将支持 jfinal 的 redirect(...) 重定向到正确的端口号
注意,这个配置要是比较高的 jfinal 版本才会有用

2020-12-22 22:54

@mr_wangyan 先检查一下,请求是不是被重定向了,检查步骤:
1:先打开浏览器 chrome 的开发者工具窗口,点击 Network 标签
2:重现一次这个问题,看请求中是不是出现了 302 与 301 重定向请求。如果没有发生,状态码是 200

2020-12-22 14:50

"项目每次重启都会跳转到xxx.com:80" 这句不知道是什么意思, 不知道细节,到底是如何跳转的?

2020-12-22 11:45

控制台输出的是下面这样的:
Parameter : title=社会

证明服务端没有乱码,没问题的

在 url 中携带中文参数会被自动 encoding,在 tomcat 下需要配置一下 server.xml

如果使用 jfinal undertow 无需配置,自动支持

2020-12-22 11:43

@steven_lhcb_9527 gradle 的配置比较简洁,但生态不如 maven 好,而且版本库仍然是用的 maven

由于 maven 的 pom.xml 文件不会被高频编辑,所以即便配置比较罗嗦也还是可以接受

2020-12-18 17:31

最好的办法是修改 package.xml 文件,在里头添加复制 WEB-INF/lib 文件到打好包的 lib 下面去

还有一个办法是修改 jfinal.sh 中的 CP 变量,将 WEB-INF/lib 加入到 class path

二者任选其一,建议通过第一种方式来做

此外, package.xml 中还留有复制本地 .jar 包的用法,用到的时候去除上面的注释改成实际配置即可

总之 pom.xml 中使用的打包插件有很多配置可用,几乎满足所有打包场景

2020-12-18 12:07

@steven_lhcb_9527 这个角度以前没注意过,依赖越多发生冲突的概率越大

2020-12-17 19:41

纯客户端的事,注意要提交 form 表交,而不是重新发起了一个 ajax 请求,你当前的 ajax 请求,并没有配置 enctype="multipart/form-data"

一般建议用 jquery-form.js 这个第三方,将表单提交转换成 ajax 提交

你刚刚发贴时用的提交就是 jquery-form.js,你可以在本站下载到这个 .js 文件,以及相关使用代码也可以直接用

2020-12-17 17:04

前台只要弄好 input type="file" 表单,后台一行代码搞定:
UploadFile list = getFiles();

2020-12-17 12:05

演示效果不错,谢谢分享

2020-12-17 12:04

报错的那个调错了方法,注意看你调用的是:findByCache

2020-12-16 15:32

jfinal 采用的 API 引导式配置,可以在 JFinalConfig 中看到实例,例如:
public void configConstant(Constants me) {
me.setDevMode(PorpKit.get("devMode"));
me.setViewType(...);
me.setJsonFactory(...);
}

这样设计的好处是,你无需记忆各种配置名称是什么,因为 eclipse 下会有代码提示,也不会写错配置项

2020-12-16 15:30

@steven_lhcb_9527 主要是因为 jfinal 采用的是 API 引导式配置方式

也就是说所有的 jfinal 配置,其实是可以通过调用 java 代码形式提供的 API 进行配置,而 properties 文件只是起一个桥梁作用,将有些不方便在 java 代码中的配置放到外部配置文件中去,例如数据库连接的密码

从而,jfinal 自身没有对复杂配置文件的需求,所以也就没有 YmlKit