java - Wicket:需要实现带有选项卡错误指示器的 AjaxTabbedPanel

标签 java wicket wicket-1.6

我有一个 AjaxTabbedPanel,每个选项卡可能包含无效内容。我想通过使用红色背景突出显示有错误的选项卡来向用户表明这一点。

作为实验,我实现了选项卡式面板的 newLink() 方法,正如您所看到的 onClick() 方法迭代父面板的所有选项卡链接并附加 CSS 类属性值以呈现红色背景。

但是我的选项卡都没有突出显示。

我找不到相关的示例,但可能有人做过类似的事情,并且可以提供一些建议。

@SuppressWarnings("unchecked")
@Override
protected WebMarkupContainer newLink(String linkId, final int index)
{
    return new IndicatingAjaxFallbackLink(linkId)
    {
        private static final long serialVersionUID = 1L;

        @Override
        public void onClick(AjaxRequestTarget target)
        {
            setSelectedTab(index);
            if (target != null)
            {
                target.add(IndicatingAjaxTabbedPanel.this);

                int tabIndex = 0;
                for (ITab tab : (List<ITab>)getTabs()) {
                    Component link = IndicatingAjaxTabbedPanel.this.get("tabs-container:tabs:" + tabIndex++ + ":link");
                    if (link != null) {
                        link.add(AttributeAppender.append("class", "invalidValue"));
                        target.add(link);
                    }
                }
            }
        }
    };
}

最佳答案

以下内容适合我。它依赖于您提供一个 AbstractTab 实现类,该实现类实现了标记接口(interface)

public interface IValidatingTab {
    public boolean valid();

    public void setValid(boolean valid);
}


/** 
    My Tab implementation
**/
public class SiteConfigTab extends AbstractTab implements IValidatingTab {

    private boolean valid;

    ...

    @Override
    public Panel getPanel(String panelId) {
        // Return your Panel (containing all the UI components of the tab)
    }

    public void setValid(boolean valid) {
        this.valid = valid;
    }

    public boolean valid() {
        return valid;
    }
}

因此每个选项卡上的组件(文本字段、复选框等)将进行某种验证,并在选项卡上设置有效性标志。

现在,我扩展了 AjaxTabbebPanel 并实现了 newLink() 方法,如下所示。 onComponentTag() 负责检查选项卡的有效性标志,并在无效时设置 CSS 类。

@SuppressWarnings("unchecked")
@Override
protected WebMarkupContainer newLink(String linkId, final int index)
{

        IndicatingAjaxFallbackLink link = new IndicatingAjaxFallbackLink(linkId)
        {
            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target)
            {
                setSelectedTab(index);
                if (target != null)
                {
                    target.add(IndicatingAjaxTabbedPanel.this);

                }


                onAjaxUpdate(target);
            }


            @Override
            protected void onComponentTag(final ComponentTag tag)
            {
                super.onComponentTag(tag);

                ITab tabPanel = (ITab)getTabs().get(index);
                String cssClass = tag.getAttribute("class");

                if (cssClass == null) {
                    cssClass = " ";
                }

                if (tabPanel instanceof IValidatingTab) {
                    if (!((IValidatingTab)tabPanel).valid()) {
                        cssClass += " invalidValue";
                    }
                }


                tag.put("class", cssClass.trim());
            }
        };

        return link;
}

关于java - Wicket:需要实现带有选项卡错误指示器的 AjaxTabbedPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21759631/

相关文章:

java - textarea Wicket 的样式文本

java - 文件上传字段 Wicket 错误

Wicket 口 6 : Write inline javascript to script tag in body

java - 为什么java8 Streams Consumer andThen 方法?

java - 在 Java Swing 中显示警告对话框

java - 如何在 onClick(View v) 方法中抛出异常

用于对象映射表单组件的 Wicket 字符串验证器

html - 阻止 Wicket 为容器元素生成 HTML?

java - 将 JRE 与我的 JAR 封装在一个 EXE 文件中

wicket - Apache Wicket 将 POST 数据重定向到外部网站