如何从 JSF 中的 javascript 函数获取 h:link 的结果值?

How to get an outcome value of h:link from javascript function in JSF?

我有一个 h:link 这样的元素

<h:link outcome="/overview.xhtml?source=menu"
        title="Overview">
            <div>...</div>
</h:link>

我想根据 JavaScript.

中的 MobileMatcher 添加一个布尔变量 phone 到 URI 地址

换句话说,我想这样设置结果:

<h:link outcome="getOverviewURI()"
        title="Overview">
            <div>...</div>
</h:link>

其中 getOverviewURI() 是返回字符串 URI 的函数:

function getOverviewURI() {
    let URI = '/overview.xhtml?phone=';
    URI += MobileMatcher.isMobile() ? "true" : "false";
    return URI;
}

然而 h:link 需要一个实际的字符串并忽略 JavaScript 函数调用。我尝试在函数调用的末尾使用分号,这使得 link 显示一条警告,指出它无法解析地址。我也尝试在那里使用纯 JS 和 "javascript:getOverviewURI()",它应该与 <a href="..."> 标签一起使用,我还尝试直接更改 DOM 元素的属性,但它嵌套得很深,我似乎无法重写。

您无法从 javascript 函数在 h:link 中获得结果,因为 JSF 始终呈现服务器端,并将尝试解析服务器端将什么放在呈现标签的属性 href 上“一种”。如果您需要动态结果,那么函数“getOverviewURI()”应该尽可能成为支持 bean 上的方法。

或者,如果您只想导航,可以使用“onclick”事件并进行以下更改:

<h:link onclick="getOverviewURI()"
        title="Overview">
            <div>...</div>
</h:link>

function getOverviewURI() {
    let URI = window.location.hostname +'/overview.xhtml?phone=';
    URI += MobileMatcher.isMobile() ? "true" : "false";
    window.location.href =URI;
}

注意使用 js 导航 jsf 应用程序有一些缺点,比如不更新后台 bean。