关于index方法的问题。

lewjun072 发布于 2012/12/23 19:10
阅读 1K+
收藏 1

Serverless 架构就不要服务器了?>>>

请教下,刚开始看jfinal,遇到一个问题。
-----------------------------
HelloController方法有index方法和sayHello方法。
在浏览器输入
http://localhost/hello/a-b 的时候能正常的执行(默认执行的是index方法)。
但是换成
http://localhost/hello/index/a-b

http://localhost/hello/index/ (这里如果没有斜杠 / 则是对的。)
的时候就出现了404 not found错误。
不过上面所说的错误,如果配置了Route:/hello/index, 则是对的。

-----------------------------

web.xml


-------------------web.xml------------------

  <filter>
    <filter-name>jfinal</filter-name>
    <filter-class>com.jfinal.core.JFinalFilter</filter-class>
    <init-param>
      <param-name>configClass</param-name>
      <param-value>config.BaseConfig</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>jfinal</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

---------------------------------

    @Override
    public void configConstant(Constants arg0) {
        arg0.setDevMode(true);
    }

    @Override
    public void configRoute(Routes arg0) {
        arg0.add("/hello", HelloController.class);
//        arg0.add("/hello/index", HelloController.class);

//        Warnning!!!
//        ActionKey already used: "/hello/sayHello"
//        Action can not be mapped: "controllers.HelloController.sayHello()"
//        arg0.add("/hello/sayHello", HelloController.class);// 有以上的warning,因此没必要配置。
        arg0.add("/student", StudentController.class);
    }

------------------------------------

jfinal 版本:1.1.6


问题就是这样的,请指教。
加载中
0
JFinal
JFinal

    路由规则在《JFinal手册》中有详细的说明。楼主的疑问很可能因为:actionKey已经有了的时候,额外在其后添加东西其实是把后面的东西当成urlPara了,例如 http://localhost/hello/index 实际是把 index当成urlPara了。因为index方法名不会成为actionKey的一部分(使用ActionKey注解时除外)。

    解决这个问题的办法只需两点:

1:仔细看一下JFinal手册中的路由配置,这部分内容就是一个四行的小表格,以及几行文字

2:当对当前路由请求有疑问时看一下 eclipse 控制台的 JFinal action report 输出。输出中会非常明确地指出当前请求的Controller、method、urlPara、parameters。

    顺便贴下 JFinal 路由规则:

lewjun072
lewjun072
@JFinal 哦,这样啊。 谢谢。
JFinal
JFinal
回复 @lewjun072 : 不配置路由当然可以,可以看一下 @绝望的八皮 做的那个JFinal自动化路由扩展
JFinal
JFinal
回复 @lewjun072 : index 方法专门用来映射入口的,入口可以是整个网站的根入口,也可以是各个模块的入口。例如,网站入口为 localhost/,user模块的入口为 locahost/user。如果没有这个规则就很不方便。 Action not found 是指当前请求的url对应不到一个action。
lewjun072
lewjun072
你好,很感谢你的回答,还请问下:为什么你说 “index方法名不会成为actionKey的一部分(使用ActionKey注解时除外)” 呢 ? 却要将这个actionKey “/hello/index” 通过路由配置才不出现警告: Action not found: /hello/index/。 还有可不可以像我上面问的那样不配置路由,而是直接映射(图片)。
a
alvinte
没别的就一句话,上图中的method不能显示使用index
0
Wentasy
Wentasy
配置了就能找到。
lewjun072
lewjun072
而且并没有配置sayHello的路由。访问sayHello有无参数或者有无斜杠/都是对的。 我觉得如果对index也要进行了路由配置才能不出现问题所描述的,感觉有点别扭。
0
Ryan-瑞恩
Ryan-瑞恩
你的路径放置的对不对?
Ryan-瑞恩
Ryan-瑞恩
你的web.xml如何配置的?贴出来看看
lewjun072
lewjun072
路径是对的,访问sayHello有无参数或者有无斜杠/都是对的。
0
lewjun072
lewjun072

-------------------web.xml------------------

  <filter>
    <filter-name>jfinal</filter-name>
    <filter-class>com.jfinal.core.JFinalFilter</filter-class>
    <init-param>
      <param-name>configClass</param-name>
      <param-value>config.BaseConfig</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>jfinal</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

Ryan-瑞恩
Ryan-瑞恩
回复 @lewjun072 : 汗……没有时间用。
lewjun072
lewjun072
回复 @Rayn-瑞恩 : jetty
Ryan-瑞恩
Ryan-瑞恩
用的tomcat吗?
0
a
alvinte
现版本的JFinal默认不可通过形如"...../..../index(/paras....)"的方式显示调用index方法,以避免url的二义性(即/A/B/index到底是指示/A/B对应Controller的index方法?还是/A/B/index对应Controller的index方法? )。这个逻辑是在某版本经过权衡之后确定的方案。
0
lewjun072
lewjun072

那“/A/B/sayHello” 也是否可以看作指示的是/A/B/sayHello 的index方法?刚开始看就搅糊涂了。我觉得这个路由用不着配置,例如:              

我才开始看,不知后面是否有讲。谢谢各位的回答,谢谢了。

返回顶部
顶部