Java 使用<;将JS数组值传递给支持bean;f:setPropertyActionListener/>;

Java 使用<;将JS数组值传递给支持bean;f:setPropertyActionListener/>;,java,javascript,jsp,jsf,jstl,Java,Javascript,Jsp,Jsf,Jstl,如何使用f:setPropertyActionListener或任何其他方法将JavaScript中的数组(基本上是用户选择的一些表行)传递给支持bean数组?使用f:setPropertyActionListener不是解决此问题的正确方法。我建议您创建h:inputHidden字段,将其绑定到bean属性,并使用javascript更新其值(在那里设置数组信息)。提交表单时,您的bean将收到您在使用javascript之前设置的值。没有更具体的说明,我假设您谈论的是一个命名数组或JSON对

如何使用
f:setPropertyActionListener
或任何其他方法将JavaScript中的数组(基本上是用户选择的一些表行)传递给支持bean数组?

使用f:setPropertyActionListener不是解决此问题的正确方法。我建议您创建h:inputHidden字段,将其绑定到bean属性,并使用javascript更新其值(在那里设置数组信息)。提交表单时,您的bean将收到您在使用javascript之前设置的值。

没有更具体的说明,我假设您谈论的是一个命名数组或JSON对象,它首先需要转换为字符串

<script type="text/javascript">
function callBackingBean(myJSON) {
   var stringArray = JSON.stringify(myJSON);
   jQuery('#theClientIdOfTheField')[0].value = stringArray;
   var button = jQuery('#theClientIdofthebutton');
   button.click();
}
</script>

<h:inputHidden id="input1" value="#{managedBean.managedProperty}" />
<h:commandButton id="buttonid" style="display: none;" />

函数callBackingBean(myJSON){
var stringArray=JSON.stringify(myJSON);
jQuery('#theclientoffield')[0].value=stringArray;
var-button=jQuery(“#客户端按钮”);
按钮。单击();
}

该策略本质上是使用一个以JSON转换的字符串作为其值的隐藏输入,同时从Javascript调用一个隐藏按钮。它甚至不需要侦听器或操作,但结果回发将导致字符串更新到托管属性。

您能帮我解决一下吗?我不知道如何为新行每次更新隐藏字段。如果你发布一个代码或者其他东西的话,这将是非常有帮助的。。如果您解释确切的用例,thanx Advanced会更好。所以我们可以知道你想做什么。你好,maple,因为我还有不止一行要通过,你能帮我怎么做吗???@user1501345我假设你使用的是一个数据表,您询问如何将每一行的JSON对象发送到托管属性中,这告诉我您可能不太了解dataTable组件。大多数第三方dataTable控件都具有内置功能,使得将其数据同步到托管属性非常容易,因此在不了解您的完整用例的情况下,我不得不假设您在这方面做得完全错误。您知道吗,您只需编写一次长格式的
jQuery
?通过将代码包装在
(函数($){…})(jQuery)中
,无论是否使用了
noConflict
,都可以使用
$
。您可以简单地使用
.val(…)
而不是
[0]。value=…
@ThiefMaster是的,我知道这一点,但不幸的是,$符号是EL表达式中的保留字符,在JSF应用程序中大量使用。这就是为什么在JSF应用程序中通常会看到jQuery以其长格式使用的原因。@user1501345:请停止发布像您刚才发布的那样不适当的垃圾邮件评论。ping并不是为了通知人们你发布的一个新的无关问题。