f:view 与许多已定义的资源库合同的行为如何?
Posted
技术标签:
【中文标题】f:view 与许多已定义的资源库合同的行为如何?【英文标题】:How behaves f:view with many defined resource library contracts? 【发布时间】:2014-04-15 07:47:56 【问题描述】:我们正在尝试使用 JSF 2.2 中的 <f:view contracts="xxx" />
功能,同时具有许多合同,例如“contract1,contract2”。
在我们的合同 1 中,我们有一个文件 style1.css
,在我们的合同 2 中,我们有一个文件 style2.css
。我们通过<h:outputStylesheet />
标签将两者都包含在我们的视图中。
如果我只在视图中使用contracts="contract1"
,JSF 日志比style2.css
少,这是合乎逻辑的。
如果我使用contracts="contract1,contract2"
,JSF 会同时导入style1.css
和style2.css
,但URL 错误(它使用&con=contract1
而不是&con=contract2
来获取资源)。
这是一个错误吗?正常吗?我找不到任何有关使用多个同时合同的文档。
【问题讨论】:
我还没有阅读这方面的规范,但从逻辑上讲,所有合约(“主题”)都应该包含完全相同的资源文件。基本上,改变的不是资源,而是资源的内容。答案就是将这两个文件重命名为同名style.css
。
但是如果每个合约都必须定义所有资源,那么同时允许多个合约又有什么意义呢?如果我设置了contracts="c1,c2"
,并且如果 c1 和 c2 都定义了所有资源,那么其中一个总是会被另一个静音,对吗?
嗯,你也许是对的。我刚刚阅读了这方面的规范,但规范本身似乎并没有说明在 <f:view contracts>
中使用多个合同。
【参考方案1】:
这是正常的行为,正如我在 Apress Pro JSF and html 5 教科书中发现的那样。摘录:
可以将多个合约映射到一个映射。在这种情况下,它将依次遍历每个合约以查找所需的模板。一旦找到模板,它将停止处理其他模板。
至于为什么允许这样做,如果它要做的只是选择第一个合适的选项,我同意你的观点,毕竟它可能毫无意义。
参考:
Apress Pro JSF and HTML 5【讨论】:
那么,这意味着 JSF 寻找第一个资源,尝试找到一个匹配的合约,然后只将这个用于以下所有资源?确实毫无意义:-/ 我会向java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC 的 JSF 规范人员报告它我相信这里的规范被破坏了。如果没有找到资源(这很容易检查),它应该在下一个合同中搜索,如果有的话。以上是关于f:view 与许多已定义的资源库合同的行为如何?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 registerForActivityResult 与 StartIntentSenderForResult 合同一起使用?