2015-12-04 3 views
0

сомневаться в калитку ... Я использую DataView и выпускается следующее сообщение об ошибке:Ошибка при перебрать с компонентом DataView, который динамически виден

"... Expected close tag is' <td wicket: id =" lblRowspan "> 'Possible attempt to embed component (s)' <input type =" text "placeholder =" Item "wicket: id =" txtNomeBem "class = "form-control" /> 'in the body of this component Which discards its body ... " 

ситуация выглядит следующим образом в этом DataView я использую ROWSPAN для слияния некоторых ячеек, 100% работает хорошо, если в линиях, которые я смешиваю, нет типа компонента, например, если строки, которые я использую rowSpan, пишут предложение. .. но когда я вставляю компонент TextField в ячейку, нет.

В приложении, которое я разрабатываю, нужно показать TextField, чтобы человек вводил некоторую информацию, только он всегда выдает исключение, указанное выше.

вот мой код: (HTML)

<tr wicket:id="dataGruposSelecionados"> 
    <td wicket:id="lblRowspan"> 
     <input type="text" placeholder="Item" wicket:id="txtNomeBem" 
       class="form-control" /> 
    </td> 
<tr/> 

Вот моя ява

dataViewGruposSelecionados = new DataView<ItemBemDto>("dataGruposSelecionados", new Provider(listaDeGrupos)) { 

      @Override 
      protected void populateItem(Item<ItemBemDto> item) {  

    Label lblRowspan = new Label("lblRowspan",item.getModelObject().getNomeItemGrupo()); 
. 
. 
. 
    int tamanho = listaBens.size(); 
    if(primeiroLoop) 
    {      
     lblRowspan.add(new AttributeAppender("rowspan", new Model<Integer>(tamanho), " ")); 
     primeiroLoop = false; 
    }else{ 
     lblRowspan.setVisible(false); 
    } 
. 
. 
. 
. 
    item.add(lblRowspan); 
    item.add(newTextFieldNomeItem(item)); 
    } 
} 

как я уже сказал, он работает на 100%, если вместо TextField я оставить это поле пустым или введите что-то в HTML, слияние работает ... но когда я вставляю какой-либо компонент в «td», вызывается исключение ...

+0

Я мог бы быть неправильно; но ваш код указывает, что lblRowSpan является родительским, а текстовое поле txtNomeBem является дочерним. Это как у вас есть текстовое поле, добавленное в ваш метод newTextFieldNomeItem (item)? Просто любопытно. – Mihir

+0

Как я уже сказал, первый столбец этого DataView будет объединен в зависимости от правила, которое для этого примера я отбросил, он работает, предположим, что у меня есть 4 строки в Dataview и слияние с ним, эти четыре строки будут включать текстовое поле. .. как я сказал, что слияние работает отлично, исключение бросается, когда я пытаюсь включить textField в эту ячейку, которая объединила ... . LblRowspan - это Отец - это ярлык, который получит инструкцию «rospan» (и это сработало) ... –

+0

. «txtNomeBem» - это «newTextFieldNomeItem (item)», это компонент, который должен быть показан в столбце, который сделал слияние простым текстовым полем, после текстового поля кода ниже: . . . частный TextField newTextFieldNomeItem (Пункт пункт) { TextField поле = новый TextField ("txtNomeBem" новый PropertyModel (item.getModelObject(), "nomeItemGrupo")); field.add (StringValidator.maximumLength (200)); поле возврата; } –

ответ

0

Я нашел ответ :) . Вместо ярлыка для управления «rowspan» в Dataview я создал WebMarkupContainer, получающий ROWSPAN ... ну, ниже найденного HTML и java-решения.

<td wicket:id="containerRowspan"> 
    <div wicket:id="panelNomeGrupo"> 
     <input type="text" placeholder="Item" wicket:id="txtNomeBem" class="form- control" /> 
    </div> 
</td> 

код Java:

 WebMarkupContainer containerRowspan = new WebMarkupContainer("containerRowspan"); 

    int tamanho = listaComTodosBens.size(); 

    if(primeiroLoop || !item.getModelObject().getNomeItemGrupo().equalsIgnoreCase(nomeAnterior)){ 
      containerRowspan.add(new AttributeAppender("rowspan", new Model<Integer>(tamanho), " ")); 
      primeiroLoop = false; 
     }else{ 
      containerRowspan.setVisible(false); 
     } 

    PanelNomeItem panel=new PanelNomeItem("panelNomeGrupo", item); 
    panel.setVisible(mostrarPainel); 
    containerRowspan.add(panel); 
    item.add(containerRowspan);