public GlossResultsSeparatedPanel(String id, IModel<List<SegmentedWord>> model) { super(id, model); Form<List<SegmentedWord>> form = new Form<>("form", model); add(form); Border textBorder = new HeaderPanel( "text", hid -> new HeaderButtonTitlePanel( hid, Model.of("Text"), bid -> new EditButton(bid, new ResourceModel("label.edit")).setSize(Size.Small))); form.add(textBorder); textBorder.add( new ListView<>( "text", model, item -> { ExternalLink link = new ExternalLink( "word", Model.of("#def_link_" + item.getIndex()), new LambdaModel<>( item.getModel(), new OptionalFunction<>(SegmentedWord.FUNCTION_TEXT))); link.add( new EnabledModelBehavior( new SupplierModel<>(() -> item.getModelObject().hasDefinition()))); link.setMarkupId("word_link_" + item.getIndex()); item.add(link); })); Border defBorder = new HeaderPanel("defs", Model.of("Definitions")); form.add(defBorder); defBorder.add( new ListView<>( "defs", model, item -> item.add( new WordPartsListPanel( "def", item.getModel(), new SupplierModel<>(() -> "#word_link_" + item.getIndex()))) .setMarkupId("def_link_" + item.getIndex()) .add( new VisibleModelBehavior( new SupplierModel<>(() -> item.getModelObject().hasDefinition()))))); }