当前位置: 首页 > 面试题库 >

小票标签未更新/仍不可见

邹祺然
2023-03-14
问题内容

我正在尝试在通过ajax WebPage交换内容的上实现面包屑导航Panel

最终看起来像这样: Home >> Page >> Panel

这是我的页面代码:

public MyPage() {
    super();
    contentContainer = new WebMarkupContainer("contentContainer");
    contentContainer.setOutputMarkupId(true);
    add(contentContainer);
    contentContainer.add(content = createContentPanel());

    breadCrumbContainer = new WebMarkupContainer("breadcrumbContainer");
    breadCrumbContainer.setOutputMarkupId(true);
    add(breadCrumbContainer);

    final AjaxLink panelLink = new AjaxLink("panelLink") {

        @Override
        public void onClick(final AjaxRequestTarget target) {
            replaceContentPanel(getOverviewPanel(), target);
        }

        @Override
        public boolean isVisible() {
            return !(content instanceof OverviewPanel);
        }
    };
    breadCrumbContainer.add(panelLink);
    panelLink.add(new Label("panelLabel", new Model<String>() {
        @Override
        public String getObject() {
            //some dynamic content for example:
            return contentPanel.getClass().getName();
        }
    }));  
}

public void replaceContentPanel(final Component replacer, final AjaxRequestTarget target) {
    content.replaceWith(replacer);
    content = replacer;
     if (target != null) {           
        target.add(contentContainer);
        target.add(breadCrumbContainer);
    }
}

主页和页面Label都很简单。每当我更新的内容时Panel,都需要更新Panel的一个WebPage。我确定
target.add(breadCrumbContainer);生产线会做到这一点。但是它是空的。标签不显示任何内容。

我希望在写问题时能找到答案-这可能很明显-但我仍然无法找到答案,所以我希望这里有人发现我的错误。


问题答案:

通过Ajax播放组件的可见性时setOutputMarkupPlaceholderTag(true)
除了之外 setOutputMarkupId(true) ,还必须使用。请注意,这setOutputMarkupPlaceholderTag(true)将自动暗示setOutputMarkupId(true)

这样做的原因是,当通过Ajax刷新组件(将其添加到AjaxRequestTarget)时,Wicket会在Ajax响应中返回刷新的标记,因此将通过JS-
DOM API通过Ajax回调方法将其替换。因此,要使替换接收到的标记的JS函数正常工作,必须要引用要替换的DOM节点(HTML
id属性)。这就是为什么setOutputMarkupId(true)需要。

更改可见性时,如果组件不可见,则Wicket不会为该组件生成任何标记,这很不错,但是有一个缺点。如果一个不可见的组件在随后的ajax请求中变为可见,则其标记将有效地返回到Ajax响应中。但是,由于该组件不可见,所以它甚至不存在于原始标记中,并且不可能在回调时替换DOM节点。这就是setOutputMarkupPlaceholderTag(true)方法开始起作用的地方,将
可能不可见的 组件包装在占位符标记(即<div>)中,该标记将始终使用适当的HTML id属性呈现。



 类似资料:
  • 问题内容: 我有一个活动,该活动的TabHost包含一组TabSpec,每个TabSpec都有一个listview,其中包含要由该选项卡显示的项目。创建每个TabSpec时,我设置一个图标以显示在选项卡标题中。 TabSpec是通过以下方法创建的,该方法循环创建适当数量的选项卡: 有几个实例,我希望能够更改程序执行过程中每个选项卡中显示的图标。目前,我正在删除所有选项卡,并再次调用上述代码以重新创

  • 不幸的是,我已经成为不断更新标签问题的牺牲品。在寻找解决方案时,我找到了一个有很多赞成票的答案,建议将我的标签绑定到StringProperty,然后每当更改StringProperty时,标签的文本就会随之更改。但是,我无法让它正常工作。 我知道这是某种线程问题。有没有办法使用DataBding解决方案等解决问题,或者线程是唯一的选择?如果线程是唯一的选择,你能给我指出正确的方向吗?我也没有找到

  • > System.out正确显示标签上的id; 第二个控制器与嵌入在第一个控制器中的FXML文件绑定。如代码所示,第二个FXML文件/控制器是动态加载的:。 当从第二个控制器中的initialize方法设置id时,id会按预期显示在标签中: public void initialize(){this.setid(“12”);} 编辑: 此窗格声明为属性 第二个:

  • vote|投票标签: 标签名称:vote 标记简介: 功能说明:用于获取一组投票表单 适用范围:全局使用 基本语法: {dede:vote id='' lineheight='22' tablewidth='100%' titlebgcolor='#EDEDE2' titlebackground='' tablebgcolor='#FFFFFF'/} 参数说明: id='' 数字,当前投票ID l

  • 问题内容: 我需要运行以下查询: 但是在执行时会出现错误: 有什么办法吗? 问题答案: 在我看来,进行一些小的更改即可解决此问题? 更改为。因此,您对想要的价值

  • 谁能帮我解决这个问题,或者给我指出正确的方向? 我正在使用Python 3.9.7 我的目标是创建一个python程序,使用Tkinter显示两个变量之间的时间差,我希望这个变量在倒计时时每秒更新一次。 我已经创建了TK窗口,其中显示了标题文本和timedif标签,但是当我的程序运行时,timedif标签不会更新。Timedif标签仅显示程序执行时的timedelta。 我定义了一个函数count