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.cssstyle2.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 合同一起使用?

面向对象

确立电子劳动合同的法律效力

确立电子劳动合同的法律效力

具有多个合同的 Mono WCF 休息服务“配置文件中未定义端点”