gpt4 book ai didi

javascript - JSF 属性标记中的值

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:51:00 26 4
gpt4 key购买 nike

如何将 JS 值传递给组件内的属性嵌套标签?

我有这个代码:

<p:remoteCommand .....>
<f:attribute name="galaxie" value="jstest()" />
</p:remoteCommand>

还有我的简单 JS jstest 函数:

function jstest(){
return "foo";
}

当我在支持 bean 中测试 galaxie 的属性值时,我有 jstest() 而不是 foo

最佳答案

<f:attribute>是在生成 HTML 代码期间在网络服务器中运行的 JSF 标记。 JavaScript 是一种客户端语言,它不在网络服务器中运行,而是在检索到所有 JSF 生成的 HTML 代码后在网络浏览器中运行。然而,您似乎期望它们“同步”运行。因此,这是不正确的。

要实现您的想法,您基本上需要提供 <h:inputHidden>它绑定(bind)到一个 bean 属性,并让 JS 在远程命令请求被触发之前填充它。

例如

<h:form id="form">
<h:inputHidden id="galaxie" value="#{bean.galaxie}" />
<p:remoteCommand ... onstart="$('#form\\:galaxie').val(jstest())" process="@form" ... />
</h:form>

或者,更简单的方法是将它作为远程命令函数参数传递,该参数接受表示请求参数映射的 JS 对象。给定一个

<h:form>
<p:remoteCommand name="foo" ... />
</h:form>

你可以这样做:

foo({ galaxie: jstest() });

可以通过@ManagedProperty领取或 ExternalContext#getRequestParameterMap() .


更新:自 PrimeFaces 3.3 起,<p:remoteCommand> 中参数的语法功能发生了变化。如果您至少使用 PrimeFaces 3.3,则函数调用应如下所示:

foo([{ name: 'galaxie', value: jstest() }]);

另见 Pass parameter to p:remoteCommand from JavaScript .

关于javascript - JSF 属性标记中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13802912/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com