如何将JS值传递给组件中的属性嵌套标签?
我有这个代码:
<p:remoteCommand .....>
    <f:attribute name="galaxie" value="jstest()" />
</p:remoteCommand>
Run Code Online (Sandbox Code Playgroud)
而我的简单JS jstest功能:
function jstest(){
    return "foo";
}
Run Code Online (Sandbox Code Playgroud)
当我在支持bean中测试galaxie的属性值时,我jstest()没有foo.
这<f:attribute>是一个JSF标记,它在生成HTML代码期间在Web服务器中运行.JavaScript是一种客户端语言,它不在webserver中运行,但在检索完所有JSF生成的HTML代码后在webbrowser中运行.然而,您似乎期望它们"同步"运行.因此不是这样.
为了实现你的想法,你基本上需要提供<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>
Run Code Online (Sandbox Code Playgroud)
或者,更容易将其作为远程命令函数参数传递,该参数接受表示请求参数映射的JS对象.给出一个
<h:form>
    <p:remoteCommand name="foo" ... />
</h:form>
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
foo({ galaxie: jstest() });
Run Code Online (Sandbox Code Playgroud)
你可以通过@ManagedProperty或收集它ExternalContext#getRequestParameterMap().
更新:自PrimeFaces 3.3以来,<p:remoteCommand>函数中参数的语法已更改.如果你至少使用PrimeFaces 3.3,那么函数调用应如下所示:
foo([{ name: 'galaxie', value: jstest() }]);
Run Code Online (Sandbox Code Playgroud)
另请参阅从JavaScript传递参数到p:remoteCommand.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           3414 次  |  
        
|   最近记录:  |