【发布时间】:2015-06-07 06:22:01
【问题描述】:
在上下文中,我可以在哪里找到使用 <ui:define> 构建的东西的信息?我想访问在我的 bean 中使用 <ui:define name="title">Some title</ui:define> 定义的页面标题。
为了说明我的问题,我可以访问使用定义的变量
<ui:param name="myVariable" value="This is my variable!"/>
通过查看 EL 上下文中的变量映射器,像这样
VariableMapper variableMapper = elContext.getVariableMapper();
String myVariable = variableMapper.resolveVariable("myVariable").getValue(elContext).toString();
这适用于<ui:param>,但如何处理<ui:define>?
【问题讨论】:
-
你到底想用它做什么?它基本上代表一个部分 JSF 组件树,而不一定是像 ui:param 这样的普通字符串。
-
@BalusC:我只是想检查一下,是否已经定义了名为
title的东西,如果没有,请设置一个通用页面标题。我很好奇,如何以编程方式完成。我在上下文中搜索带有键title的组件树,但找不到它。 -
好的,你基本上是想检查是否在模板客户端中定义了
<ui:define name="title">的<ui:insert name="title">,不管内容如何? IE。您只对基于您可以在模板中其他地方使用的布尔值true或false感兴趣?如果是这样,那么这是否可以接受为欺骗? stackoverflow.com/questions/26070704/… -
@BalusC:页面标题应采用以下形式:
AppName - PageTitle。有些页面没有定义PageTitle,它们将AppName作为通用标题。有些人这样做,对于这些页面,定义的PageTitle应与AppName和dash前缀连接。在处理这个问题时,我尝试在 bean 中检索ui:define的内容,以查看此信息在上下文中的存储方式和位置,但无法找到它。我花了几个小时试图解决这个问题,但我在网上找不到任何相关信息。任何正确方向的提示也非常受欢迎。 -
@BalusC:您提供的链接绝对是这个问题的可接受解决方案,但我有兴趣学习如何通过代码访问 ui:define 块。