【发布时间】:2012-07-19 13:10:36
【问题描述】:
如何使用 f:setPropertyActionListener 或任何其他方法将 JavaScript 中的数组(基本上是用户选择的一些表行)传递给支持 bean 数组?
【问题讨论】:
标签: java javascript jsp jsf jstl
如何使用 f:setPropertyActionListener 或任何其他方法将 JavaScript 中的数组(基本上是用户选择的一些表行)传递给支持 bean 数组?
【问题讨论】:
标签: java javascript jsp jsf jstl
在没有更具体的情况下,我假设您在谈论一个命名数组或一个 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;" />
该策略本质上是使用隐藏输入,将 JSON 转换后的字符串作为其值,同时从 Javascript 调用隐藏按钮。它甚至不需要侦听器或操作,但生成的回发将导致字符串更新为托管属性。
【讨论】:
jQuery吗?通过将代码包装在(function($) { .... })(jQuery); 中,无论noConflict 是否已使用,您都可以使用$。您可以简单地使用.val(...) 而不是[0].value = ...
使用 f:setPropertyActionListener 不是解决此问题的正确方法。我建议您创建 h:inputHidden 字段,将其绑定到 bean 属性并使用 javascript 更新它的值(在那里设置数组信息)。提交表单后,您的 bean 将收到您在使用 javascript 之前设置的值。
【讨论】: