<f:attribute>
是一个JSF标记,它在生成HTML代码期间在Web服务器中运行。 JavaScript是一种客户端语言,它不能在web服务器上运行,但在检索到所有JSF生成的HTML代码后在webbrowser中运行。然而,你似乎期望他们“同步”运行。这是不正确的。
为了实现您的想法,您基本上需要提供绑定到bean属性的<h:inputHidden>
,并让JS在填充远程命令请求之前填充它。
E.g.
<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。
组件的属性在服务器级别声明和设置,而不是在客户端级别。换句话说,不以这种方式将客户端值提交给服务器组件属性。你特别想要达到什么目标,因为可能有更好的方法来实现它。 –
谢谢你,是的,我认为它... –