本地文件

浏览器和本地URI

许多资源依赖于地域(locale),有时依赖于用户用于访问Web页面的浏览器。例如,你需要为汉字显示大字体,以获得更好的可读性。

若你使用"*"指定了样式表的URL,ZK可以为你自动处理这些。算法(algorithm)如下。

  1. 若在一个URI内指定了"*",例如/my*.css,那么"*"将会被一个合适的地域(Locale)代替,在浏览器的首选项内指定。

    例如,用户的首选项为de_DE,那么ZK将会从你的Web站点依次查找/my_de_DE.css/my_de.css,和 /my.css,直到任一个被找到。若没有找到,则仍然使用/my.css

  2. 若在一个URI 内指定了两个或更多的"*",例如"/my*/lang*.css",那么首个"*",对于IE会被"ie"代替,Safari为"saf",而其它浏览器[63]为"moz" 。此外,最后一个星号(asterisk)会被一个合适的地域(Locale) 代替,就像上一布描述的那样。综上所述,最后一个星号(the last asterisk)表示地域(Locale),而第一个星号表示浏览器类型。

  3. 所有其它的 "*" 会被忽略。

[注]: 表示地域(Locale)的最后那个星号必须被放置于首个点(".")之前且中间无任何字符,或若没有点则置于最后。另外,下列的斜杠是不允许的(no following slash (/) is allowed),也就是说,它必须为文件名,而不是目录。若最后一个星号不满足此约束,它就会被除去(eliminated)(而不是忽略)。

例如,"/my/lang.css*"等价于"/my/lang.css"。

换言之,你可以认为它是中立于地域的(you can consider it as neutral to the Locale)。

[提示]: 我们可以将此规则应用于指定一个依赖于浏览器类型的 URI,而不是依赖于地域(Locale)。例如,若用户使用的为IE,则"/my/langie.css"会代替"/my/lang*.css*"。

在下面的例子中,我们假定选中的地域(Locale)为de_DE,且浏览器为IE。

URI

被搜索的资源

/css/norm*.css

  1. /norm_de_DE.css

  2. /norm_de.css

  3. /norm.css

/css-*/norm*.css

  1. /css-ie/norm_de_DE.css

  2. /css-ie/norm_de.css

  3. /css-ie/norm.css

/img*/pic*/lang*.png

  1. /imgie/pic*/lang_de_DE.png

  2. /imgie/pic*/lang_de.png

  3. /imgie/pic*/lang.png

/img*/lang.gif

  1. /img/lang.gif

/img/lang*.gif*

  1. /img/langie.gif

/img*/lang*.gif*

  1. /imgie/lang*.gif

在Java中定位浏览器与本地资源

除了组件属性和ZUML属性,你可以使用Java编程来处理浏览器和本地资源。这里为你可以使用的方法列表。

  • org.zkoss.zk.ui.Exection 中的encodeURL forwardinclude方法,分别用于编码URL,转向另一个页面,及包含一个页面。在大多数情况下,这些方法可以满足你的需求。

  • org.zkoss.web.servlet.Servlets 中的locate forward,和include方法,用于定位Web资源。当开发ZK应用程序时,你很少需要它们,但是对于编写servlet,portlet 或 filter 是很有用的。

  • org.zkoss.web.servlet.http.EncodesencodeURL 的方法,用于编码URL。当开发ZK应用程序时,你很少需要它们,但是对于编写servlet,portlet 或 filter 是很有用的 。

  • org.zkoss.util.resource.Locators 中的locate方法,用于定位类资源。



[63] 在未来的版本中,除了Internet Explorer, Firefox 和 Safari,我们将为浏览器使用不同的代码。