【问题标题】:can I update the title bar?我可以更新标题栏吗?
【发布时间】:2012-05-31 01:54:44
【问题描述】:

在之前的question 中,我询问了有关更新菜单栏的问题。 BalusC 告诉我需要添加包含菜单栏的表单。

我想扩展该问题以询问我是否可以更新标题中的文本。正在使用模板,我使用

填写值
    <ui:define name="AreaTitle">
        #{viewBacking.current.firstName}  #{viewBacking.current.surName}
    </ui:define>

模板有

<h:head>
<title><ui:insert name="AreaTitle">Master template</ui:insert></title>
<link href="style.css" rel="stylesheet" type="text/css" media="screen" />
</h:head>

在标题中定义一个表单似乎很奇怪,所以没有定义。我在 viewBacking.current 中设置了一个断点,以便查看它何时使用它。即使我点击刷新以重新显示表单,它也不会再次遇到断点。只有当我转到具有不同内容的不同页面时,它才会再次达到断点。用于刷新的是

public void refreshForm() {
    RequestContext context = RequestContext.getCurrentInstance(); 
    context.update("menuForm:masterMenuBar");
    context.update("AreaTitle");
}

这显示了 BalusC 在 masterMenuBar 上给我的先前解决方案。很可能我不能做我要求做的事情,但如果是这种情况,我想确认一下。

谢谢, 宜兰

【问题讨论】:

    标签: ajax jsf primefaces


    【解决方案1】:

    您不能仅仅因为&lt;title&gt; 不是 JSF 组件而通过 JSF ajax 更新来更新标题。您也不能将 HTML 或 JSF 组件放入&lt;title&gt;,这是illegal HTML 语法。

    最好的办法是使用 JavaScript 来更新标题,将其分配给 document.title。您可以为此使用RequestContext#execute()

    String fullName = current.getFirstName() + " " + current.getSurName();
    context.execute("document.title='" + fullName + "'");
    

    由于这似乎是用户控制的数据,我会使用StringEscapeUtils#escapeJavaScript() 对其进行转义,以防止潜在的XSS attack holes

    String fullName = current.getFirstName() + " " + current.getSurName();
    context.execute("document.title='" + StringEscapeUtils.escapeJavaScript(fullName) + "'");
    

    另一种方法是使用OmniFaces &lt;o:onloadScript&gt;

    <o:onloadScript>document.title='#{of:escapeJS(viewBacking.current.firstName)} #{of:escapeJS(viewBacking.current.surName)}'</o:onloadScript>
    

    这将在每个 ajax 请求上重新执行。

    【讨论】:

    • 感谢您的回答。我不知道 HTML 语法的非法检查。我试了一下,出现了 62 个错误。它提取了所有与 primefaces 相关的特殊输入,并将它们全部标记为非法。由于存在所有误报,因此更难发现真正的问题。
    • 我尝试了你的建议,显然它有效。如果我可以问的话,我想要更多。对于许多页面,我想要的不仅仅是名称,即名称+他当前正在使用的页面的某种建议。为此,我必须访问我的 或获取当前页面名称的值。
    猜你喜欢
    • 2014-07-13
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多