lishunli / nutz

Automatically exported from code.google.com/p/nutz
0 stars 0 forks source link

路径参数小问题 #185

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
以下是文档中的说明

关键就在于这个 {*@At("/article/*")}。 Nutz.Mvc 
在解析路径的时候,碰到了 
*, 它就会将这个路径从此处截断,后面的字串按照字符 '/' 
拆分成一个字符串数
组。 
为入口函数填充参数的时候,会优先将这个路径参数数组按��
�顺序填充成参数,
之后,才应用 适配器的内部逻辑,填充其余的参数。

问,如果我的所有参数都是可选的,而且在默认情况下,一个参��
�都不用传,怎么办?

建议以下形式都合法,重点是最后一个
/article/zozoh/1352.nutz
/article/zozoh.nutz
/article.nutz

Original issue reported on code.google.com by zkgale@gmail.com on 14 May 2010 at 7:19

GoogleCodeExporter commented 9 years ago
我起码反对最后一种, /article/* 并不能匹配 /article.nutz

我建议你附上例子, 实在不好理解. 什么叫 
"所有参数都是可选的"?

Original comment by wendal1985@gmail.com on 14 May 2010 at 7:24

GoogleCodeExporter commented 9 years ago
/article/.nutz
刚刚试了下,竟然可以这样用...

localhost:8888/abc/find.nutz    --查询所有,可以根据name进行查询
localhost:8888/abc/list/xxx.nutz --查询name为xxx的内容
localhost:8888/abc/list/.nutz  --这样写有点点不是很舒服

另外,之所以有路径参数,其原因就是想用URL的形式来表示参数
,为什么不能接受没有参数的情况
下还原成原始状态呢?

Original comment by zkgale@gmail.com on 14 May 2010 at 7:35

GoogleCodeExporter commented 9 years ago
在匹配的时候,会首先将路径的扩展名去掉,所以 
   /article/abc.nutz 同 /article/abc 对于 Mvc 来说没有什么不同

另外,如果你的入口函数是:

@At("/app/*")
public void someFunc(String name, int id){
   // TODO ...
}

那么,你必须给出 /app/abc/23 才能正确访问,因为 abc 要赋给 
name, 而 23 要赋给 ID

如果你想访问 /app/ 
也能正常访问到这个入口函数,你需要这么声明:
@At("/app/*")
public void someFunc( @Param("nm") String name,
                      @Param("id") int id){
   // TODO ...
}

这样,你访问 /app/?name=xxx&id=22 也可以,如果你给出的 URL 是
/app/abc/15?name=xxx&id=22
那么路径参数优先, name 会被赋值 abc, id 会被赋值 15

总之,这是一个参数调用,你总得给点什么,Nutz.Mvc 
才能为你的入口函数准备参数

Original comment by zozoh...@gmail.com on 14 May 2010 at 8:58

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
主要问题在于,就算我有帮个参数,但是我什么都不给呢?那么,�
��在框架生成的URL的形式便是:
/article/.nutz  (nutz,是在web.xml中进行配置的)

感觉就有点怪异
而我在这里提出的内容是,希望把
/article/.nutz
这种形式,转在
/article.nutz
的形式,而且这样的话与之前的所有功能并没有任何冲突.
然后却更好理解一些

按我说的的话,情况会是这样:
@At("/article/*")
public void article(Long id, String name){
// TODO ...
}

以下形式均合法:
/article.nutz       
/article.nutz?id=12&name=xx
/article/12.nutz
/article/12.nutz?id=11&name=xx

突然想到,如果按这种方式的话,是不是就变向的把,@At("/article"
)与@At("/article/*")有机的
结合起来了呢?

而且这样也不至于说访问/article.nutz会报404,并且使这个地方在
使用更圆滑些,是不?

Original comment by zkgale@gmail.com on 14 May 2010 at 9:25

GoogleCodeExporter commented 9 years ago
而且,嘿嘿嘿嘿,如果把这个地方整合了的话,是不是可以把@At("
/article/*")这种语法给去了呢?默
认让@At("/article")来完成它的功能....

嘿嘿嘿嘿嘿嘿,我觉得这样满好的,少种语法,功能却一点不少

Original comment by zkgale@gmail.com on 14 May 2010 at 9:30

GoogleCodeExporter commented 9 years ago
@At("/article/*") 语法是通配
@At("/article") 语法是精确匹配
两个个合并不得。

现在的实现,我们并没有认为路径中的 '/' 
同其他字符有什么不同,因此
@At(/article/.nutz) 是不能匹配 /article.nutz 的

另外,说一点题外话:
  这里我们并不想做到"让 @At 有最大限度的容忍错误"
  我们对于错误的书写是零容忍的。
     一种 URL 只有一种 @At 的书写方式,不会让人迷茫
     我认为这样会帮你在消除一些潜在的编码错误
     我们会保持这里的“僵化”

Original comment by zozoh...@gmail.com on 21 May 2010 at 3:20

GoogleCodeExporter commented 9 years ago

Original comment by zozoh...@gmail.com on 15 Jul 2011 at 3:21