刷新组元素

时间:2013-11-28 04:29:50

标签: javascript jsf

我有一个JSF页面,它基本上只是数据的行和列。每行的数据来自类实例的属性。每行都有一个链接,当单击它时调用一个支持bean方法,该方法刷新该行上的数据。行由标题分隔,标题代表它们下面的行组。我想让标题成为一个链接,这样它就会刷新它下面的所有行。我尝试使用这样的一些JavaScript:

function refreshGroup(){
  var obj1 = document.getElementById("refresh0:link0");
  var obj2 = document.getElementById("refresh1:link1");
  window.open(obj1);
  window.open(obj2);
 };

但这只是打开了新标签。有没有办法让它像用户点击每个链接一样?这就是JSF对于调用支持bean的链接的看法:

<h:form id="refresh#{loop.index}" >
  <h:commandLink id="link#{loop.index}" value="#{a.status}" >
    <f:ajax listener="#{a.getCheckAppMonitor}" 
            render=":errs#{loop.index} :refresh#{loop.index} :errs_#{i+1}"
            onevent="refreshMoreLessLinks" />
  </h:commandLink>&nbsp;<img id="img_#{loop.index}" 
                             class="hidden" 
                             src="resources/images/ajax-loader.gif"/>
</h:form>

这些都嵌套在c:foreach循环中。

标题链接如下所示:

<h3><a href="javascript:refreshGroup();">Group 1</a></h3>

编辑:

我想到我需要创建一个commandLink,以便我可以再次渲染所有内容。我这样做了:

<h:form id="header1" >
  <h:commandLink class="link" value="Group 1" >
    <f:ajax listener="#{appBean.refresh}" render="@all" />
  </h:commandLink>
 </h:form>

它似乎有效,只是它导致我的浏览器(IE8)崩溃。当浏览器恢复时,我可以看到它确实更新了。关于render =“@ all”的任何想法都会导致我的浏览器崩溃?我将@all更改为一个元素并且工作正常。

1 个答案:

答案 0 :(得分:0)

此,

var obj1 = document.getElementById("refresh0:link0");
window.open(obj1);

不是触发HTMLAnchorElement实例点击的正确方法。您需要调用其click()方法。

var obj1 = document.getElementById("refresh0:link0");
obj1.click();