ajax使用formdata发送请求,访问不到正确的路径

前端访问:/Apply/apply/Step1Save ,一直访问不到争取的方法。

每次请求都发到/Apply/apply/index,以为是拦截器的问题,但是加了@Clear,还是访问到index。

求解


前端代码:

$('#submit').click(function() {

					
					var form = new FormData(document.getElementById("msform"));
					console.log(">>>>>>>>>"+form.get("applyName"));
					console.log(">>>>>>>>>"+form.get("name"));
					$.ajax({
			            url:"/Apply/apply/step1Save",
			            type:"post",
			            dataType: "json",
			            data:form,
						processData:false,
			            contentType:false,
						async: false,
						cache: false,
			            success:function(data){
							var object=eval(data);
							var rst=eval(object.result);
							console.log("登录结果:"+rst.code);

			            },
			            error:function(e){
			                alert("登录失败!");
			                console.log("over..Fail"+e);
			            }
			        });

			});

后台代码:

@LeeAction("/apply")
public class ApplyStep1Controller extends Controller {

	private DynamicMsgService msgService=new DynamicMsgService();
	private ApplyService applyService=new ApplyService();
	
	
	/**
	 * 跳转申请信息页面
	 */
	@Clear
	public void index() {
		render("apply.html");
	}
	
	@Clear
	public void step1Save() {
		List<UploadFile> list =getFiles();
//		UploadFile f=getFile();
		
		String name = getPara("applyName");
		String idno = getPara("applyIdNo");
		String phone = getPara("phone");
		String scope = getPara("servScope");
		// <OPTION VALUE="1">水电工 </OPTION>
	        。。。。。。。。。。
	}


评论区

zhangchuang

2019-02-27 13:03

@LeeAction 是什么? 放这代码 哪位能看懂呀

JFinal

2019-02-27 17:27

jfinal 并未提供 @LeeAction("/apply") 这种用法,应该是你们扩展过的功能,看看源码如何实现的

猴子的花果山

2019-02-27 20:54

@JFinal
主要是做controller扫描,自动分发controller路径,下面是代码:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface LeeAction {

/**
* controller路由,请求链接
*/
String value();

/**
* 请求页面位置
*/
String viewPath() default "";
}

Config 配置如下:
/**
* 配置JFinal路由映射
*/
@Override
public void configRoute(Routes me) {
// 扫描的包为cn,baseViewPath为WEB-INF/views
me.add(new AutoBindRoutes("com.dmm.common.controller", "/views"));
}


AutoBinds代码:
public class AutoBindRoutes extends Routes {
/**
* controller扫描的包
*/
private String packName;
/**
* 视图基本目录
*/
private String baseViewPath;

public AutoBindRoutes(String packName) {
this.packName = packName;
}

public AutoBindRoutes(String packName, String baseViewPath) {
this.packName = packName;
this.baseViewPath = baseViewPath;
}

@Override
public void config() {
if (baseViewPath != null) {
setBaseViewPath(baseViewPath);
}
// 过滤
FileScanUtil fileScanKit = new FileScanUtil(LeeAction.class, packName);
List> controllers = fileScanKit.scanPackage();
// 循环controller,绑定路由
for (Class controller : controllers) {
// 获取注解上的内容
Annotation annotation = controller.getAnnotation(LeeAction.class);
LeeAction jAction = (LeeAction) annotation;
String url = jAction.value();
String viewPath = jAction.viewPath();
// 绑定路由
add(url, controller, viewPath);
}
}
}


也是参照论坛里分享的案例写的

JFinal

2019-02-27 21:16

@猴子的花果山 建议用 jfinal 原生的路由功能,简单方便,稍微习惯一下就好,省去很多麻烦

要知道 jfinal 原生路由是支持 Routes 级别的 Interceptor、ViewPath、mappingSuperClass(boolean) 的

猴子的花果山

2019-02-27 21:25

@JFinal 好的我试下呢

猴子的花果山

2019-02-27 21:25

@JFinal 谢谢大神指导

JFinal

2019-02-27 21:27

@猴子的花果山 路由的详细文档在这里:
https://www.jfinal.com/doc/2-3

热门分享

扫码入社