java - 如何使用 ajax 设置 wicket listview 面板更新的 anchor

标签 java html ajax wicket

我在面板中有一个 ListView,它启用了垂直滚动并使用 css 进行绝对定位。当我选择添加到 listView 的 IndicatingAjaxFallbackLink 时,它会更新页面上的其他面板以提供 listItem 的更多信息/选项。它还刷新 listView 以添加 css 类来突出显示所选的 listItem。我正在尝试向 listView 添加一个 anchor ,以便它将呈现滚动以显示选定的 listItem。

问题:当我选择列表中的某个项目时,listView 将重新加载并滚动到面板顶部,而不是滚动到所选项目。如果没有网址重定向和整页重新加载,这可能吗?

标记:

<div wicket:id="psbContainer" style="position: absolute; top: 325px; height: 300px; overflow-y: auto; left: 4px; right: 305px;">
    <table width="100%">
        <tr wicket:id="psbList" valign="top">
            <td><a wicket:id="viewRelated"><span wicket:id="psbNum"/></a></td>
            <td wicket:id="summary"/>
            <td wicket:id="psbMilestone"/>
            <td wicket:id="dueDate"/>
            <td wicket:id="devCount"/>
            <td wicket:id="activeCount"/>
            <td wicket:id="ccCount"/>
            <td wicket:id="team"/>
        </tr>
    </table>
</div>

java:

    psbListView = new ListView("psbList", psbList) {
        protected void populateItem(ListItem listItem) {
            final Space psb = (Space) listItem.getModelObject();
            if(psb.equals(psbSelected)) {
                listItem.add(selected);
            }
            // viewRelated ========================================================
            IndicatingAjaxFallbackLink viewRelated = new IndicatingAjaxFallbackLink("viewRelated") {
                public void onClick(AjaxRequestTarget target) {
                    psbSelected = psb;
                    target.addComponent(pslpContainer);
                }
            };
            this.setOutputMarkupId(true);
            this.setMarkupId(psb.getPsbNum());
            viewRelated.setAnchor(this);
            viewRelated.add(new Label("psbNum", new Model(psb.getPsbNum())));
            listItem.add(viewRelated);
            ...

最佳答案

为什么不在 AjaxRequestTarget 中使用纯 javascript 更新客户端 CSS 样式?可能不会超过

ListItem<?> previousSelected = ...;
ListItem<?> currentSelected = ...;

target.appendJavaScript("document.getElementById('" + previousSelected.getMarkupId() + "').className=\"\";");
target.appendJavaScript("document.getElementById('" + currentSelected.getMarkupId() + "').className=\"selected\";");

这样您就不必更新整个 ListView 来更改某些类。

关于java - 如何使用 ajax 设置 wicket listview 面板更新的 anchor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13279697/

相关文章:

java - BufferedReader/PrintWriter 有问题吗?

java - html中没有可用的id、xpath、classnmae、teg、link、cssselector、名称用于selenium对象识别java

html - IE 7-8 中的 jqGrid 在编辑/添加时在内容之上创建灰色区域而不是在其之上

javascript - AJAX 表单和 Rails 在 js 模板上呈现?

Java:是否有一些工具能够将 X[][] 重构为 List<List<X>>?

java - 按第一列排序二维数组,然后按第二列排序

html - 当溢出设置为隐藏时,嵌套的内联 block 元素在 FF/IE 中被上推

javascript - jQuery Ajax 请求 (CORS) 返回未定义

javascript - 在 AJAX 加载的元素上运行 &lt;script&gt;

java - MMM 格式的 SimpleDateFormat 打印 "."