3

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

我有这个代码:

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

还有我的简单 JSjstest函数:

function jstest(){
    return "foo";
}

当我在 backing bean 中测试 galaxie 的属性值时,我jstest()没有foo

4

1 回答 1

6

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

为了实现您的想法,您基本上需要提供<h:inputHidden>绑定到 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() }]);

另请参阅从 JavaScript 向 p:remoteCommand 传递参数

于 2012-12-10T14:38:59.243 回答