Apache wicket 6.29x, RadioGroup с ListView с помощью AjaxFormChoiceComponentUpdatingBehavior () - PullRequest
0 голосов
/ 14 января 2019

У меня есть список, и у каждого элемента в этом списке есть радиогруппа для двух опций, в зависимости от выбора, который появляется поле для загрузки, я сделал очень динамически с динамическим идентификатором, но единственная итерация AjaxFormChoiceComponentUpdatingBehavior, которая работает, и последняя radioGroup списка просмотра.

    LoadableDetachableModel<List<RegistroPresencaColaborador>> registroPresencasColab = new LoadableDetachableModel<List<RegistroPresencaColaborador>>() {
        private static final long serialVersionUID = 1L;
        @Override
        protected List<RegistroPresencaColaborador> load() {
            List<RegistroPresencaColaborador> list = new ArrayList<RegistroPresencaColaborador>();
            count=0;
            if(listaRegistroPresencas!=null && listaRegistroPresencas.size() > 0 ){
                list.addAll(listaRegistroPresencas);
            }
            return list;
        }
    };

    listViewRegistroColab = new ListView<RegistroPresencaColaborador>("listaRegistroPresencaColab",registroPresencasColab){
        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(ListItem<RegistroPresencaColaborador> item) {
            final RegistroPresencaColaborador registroPreColaborador = item.getModelObject();




            count++;
            registroPreColaborador.setCount(count.toString());
            if(clicouSelecionarTodos !=null && getClicouSelecionarTodos()){
                registroPreColaborador.setFrequencia(RegistroPresencaColaborador.PRESENCA);
            }else if(clicouSelecionarTodos !=null && !getClicouSelecionarTodos()){
                registroPreColaborador.setFrequencia(RegistroPresencaColaborador.FALTA);
            }

            item.addOrReplace(new Label("colaborador",registroPreColaborador.getColaborador().getNome()).setOutputMarkupId(true));
---RadioGroup   item.addOrReplace(criarCampoFrequencia(registroPreColaborador));
            item.addOrReplace(criarDivAnexoColab(registroPreColaborador));


//item.add(criarDivLinkDownload(registroPreColaborador));
        }
    };

// Компонентная радиогруппа

    private RadioGroup<Integer> criarCampoFrequencia(final RegistroPresencaColaborador registroPreColaborador ) {
    radioGroupTipo = new RadioGroup<Integer>("frequencia", new PropertyModel<Integer>(registroPreColaborador, "frequencia")){
        private static final long serialVersionUID = 1L;
        @Override
        public boolean isEnabled() {
            if(getAbstractBean().getId()!=null && getAbstractBean().getVisualizar()){
                return false;
            }else{
                return true;
            }
        }
    };
    if(radioGroupSelecionouTodos.getModelObject() != null && !radioGroupSelecionouTodos.getModelObject() || registroPreColaborador.getId() != null && registroPreColaborador.getFrequencia().equals(RegistroPresencaColaborador.FALTA) ){
        radioGroupTipo.add(new AttributeModifier("class", "switch-toggle switch-candy switch-candy-red large-4"));
    }
    radioGroupTipo.setRequired(true);
    radioGroupTipo.setOutputMarkupId(true);
    radioGroupTipo.setOutputMarkupPlaceholderTag(true);
    radioGroupTipo.setRenderBodyOnly(false);

    radioGroupTipo.add(new Radio<Integer>("tipoPresenca", new Model<Integer>(RegistroPresencaColaborador.PRESENCA)).add(new AttributeModifier("id", "tipoPresenca"+registroPreColaborador.getCount())).setOutputMarkupId(true));
    radioGroupTipo.add(new Radio<Integer>("tipoFalta", new Model<Integer>(RegistroPresencaColaborador.FALTA)).add(new AttributeModifier("id", "tipoFalta"+registroPreColaborador.getCount())).setOutputMarkupId(true));
    radioGroupTipo.add(new AjaxFormChoiceComponentUpdatingBehavior() {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            if(radioGroupTipo.getModelObject() != null && radioGroupTipo.getModelObject().equals(RegistroPresencaColaborador.FALTA)){
                radioGroupTipo.add(new AttributeModifier("class", "switch-toggle switch-candy switch-candy-red large-4"));
            }else if(radioGroupTipo.getModelObject() != null &&  radioGroupTipo.getModelObject().equals(RegistroPresencaColaborador.PRESENCA)){

                radioGroupTipo.add(new AttributeModifier("class", "switch-toggle switch-candy switch-candy-green large-4"));
            }
            target.add(radioGroupTipo);
            target.add(divAtualizaArquivo);
        }
    });

    radioGroupTipo.add(criarLabelPresenca(registroPreColaborador));
    radioGroupTipo.add(criarLabelFalta(registroPreColaborador));
    return radioGroupTipo;
}

// метка для каждой радиогруппы

private Label criarLabelFalta(final RegistroPresencaColaborador registroPreColaborador ){
    Label falta = new Label("falta", "Falta");
    falta.setOutputMarkupId(true);
    falta.setOutputMarkupPlaceholderTag(true);
    falta.add(new AttributeModifier("for", "tipoFalta"+registroPreColaborador.getCount()));
    return falta;
}

private Label criarLabelPresenca(final RegistroPresencaColaborador registroPreColaborador ){
    Label presenca = new Label("presenca", "Presença");
    presenca.setOutputMarkupId(true);
    presenca.setOutputMarkupPlaceholderTag(true);
    presenca.add(new AttributeModifier("for", "tipoPresenca"+registroPreColaborador.getCount()));
    return presenca;
}

// моя HTML треска

    <tr wicket:id="listaRegistroPresencaColab">
                                                                            <td style="text-align: left;"><span wicket:id="colaborador">Colaborador</span></td>
                                                                            <td style="width: 20%; border: 1px solid #333;   border-radius: 3px; text-align: center; vertical-align:middle;">
                                                            <div wicket:id="frequencia"  class="switch-toggle switch-candy large-6 ">
                                                                                        <input wicket:id="tipoPresenca" type="radio" /><label onclick="" wicket:id="presenca"  >Presença</label>
                                                                                        <input wicket:id="tipoFalta"   type="radio"/><label onclick="" wicket:id="falta" >Falta</label>
                                                                                    </div>
                                                                            </td>
                                                                            <td style="text-align: left;"><div wicket:id="divAtualizaArquivo">  <input wicket:id="arquivoAnexoRegistro" type="file" class="form-control"/> </div></td>
                                                                        </tr>

// Imagem https://uploaddeimagens.com.br/imagens/opera_instantaneo_2019-01-14_114545_localhost-png

Кто-нибудь еще проходил через это или вы знаете способ решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Solucion

объявляйте локально, если вам нужно дать цели, используйте WebMarkupContainer и нацеливайте его.

private RadioGroup<Integer> criarCampoFrequencia( RegistroPresencaColaborador registroPreColaborador ) {
    final RadioGroup<Integer> radioGroupTipo = new RadioGroup<Integer>("frequencia", new PropertyModel<Integer>(registroPreColaborador, "frequencia")){
        private static final long serialVersionUID = 1L;
        @Override
        public boolean isEnabled() {
            if(getAbstractBean().getId()!=null && getAbstractBean().getVisualizar()){
                return false;

            }else{
                return true;
            }
        }
    };

}
0 голосов
/ 15 января 2019

Тот факт, что обновления Ajax работают только для вашей последней итерации, убедительно свидетельствует о наличии дублирующихся идентификаторов в разметке.

Обратите внимание, что вам не нужно возиться с setOutputMarkupId() или new AttributeModifier("id"), поскольку AjaxFormChoiceComponentUpdatingBehavior автоматически сгенерирует необходимый идентификатор разметки.

Я не обнаружил никаких ошибок в вашем коде, поэтому, пожалуйста, перепроверьте полученную разметку в браузере.

Для AjaxFormChoiceComponentUpdatingBehavior идентификатор разметки на вашем div "частоты "имеет решающее значение, а для радиовходов не имеет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...