Java Wicket:需要实现带有选项卡错误指示器的AjaxTabbedPanel
我有一个AjaxTabbedPanel,每个选项卡可能包含无效的内容。我想通过使用红色背景突出显示带有错误的选项卡来向用户指出这一点 作为一个实验,我实现了选项卡式面板的Java Wicket:需要实现带有选项卡错误指示器的AjaxTabbedPanel,java,wicket,wicket-1.6,Java,Wicket,Wicket 1.6,我有一个AjaxTabbedPanel,每个选项卡可能包含无效的内容。我想通过使用红色背景突出显示带有错误的选项卡来向用户指出这一点 作为一个实验,我实现了选项卡式面板的newLink()方法,如您所见,onClick()方法迭代父面板的所有选项卡链接,并附加CSS类属性值以呈现红色背景 但我的所有标签都没有突出显示 我找不到这样做的相关例子,但可能有人做过类似的事情,并能提供一些建议 @SuppressWarnings("unchecked") @Override protected WebM
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);
}
}
}
}
};
}
@SuppressWarnings(“未选中”)
@凌驾
受保护的WebMarkupContainer新链接(字符串linkId,最终整数索引)
{
返回新的标识和回退链接(linkId)
{
私有静态最终长serialVersionUID=1L;
@凌驾
公共void onClick(AjaxRequestTarget目标)
{
设置选定的选项卡(索引);
如果(目标!=null)
{
add(indicatingajaxtabedpanel.this);
int-tabIndex=0;
for(ITab选项卡:(列表)getTabs()){
Component link=indicatingajaxtabedpanel.this.get(“制表符容器:制表符:“+tabIndex+++”:链接”);
如果(链接!=null){
add(AttributeAppender.append(“class”,“invalidValue”);
添加(链接);
}
}
}
}
};
}
以下是我的工作。它依赖于您提供一个AbstractTab
实现类,该类实现了一个标记接口
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;
}
}
因此,每个选项卡上的组件(文本字段、复选框等)将进行某种验证,并在选项卡上设置有效性标志
现在,我扩展了ajaxtabebpanel
,并实现了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;
}
这看起来有效,所以我唯一的猜测是,您的路径“tabs容器:tabs:”+tabIndex++“:link”是错误的。你检查过了吗?谢谢,我正在尝试另一种策略,使用onComponentTag()。如果有效,将发布代码