我有一个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> <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更改为一个元素并且工作正常。
答案 0 :(得分:0)
此,
var obj1 = document.getElementById("refresh0:link0");
window.open(obj1);
不是触发HTMLAnchorElement
实例点击的正确方法。您需要调用其click()
方法。
var obj1 = document.getElementById("refresh0:link0");
obj1.click();