Как динамически назначить идентификатор в JSf столбцу Datatable

#jsf #datatable

#jsf #datatable

Вопрос:

Привет, пожалуйста, проверьте приведенный ниже код для вашей ссылки.

                                     <%
                                        System.out.println("Here???????? 111111 :::::::::::::: " request.getAttribute("COLUMNSIZE"));

                                        if(request.getAttribute("COLUMNSIZE") != null){

                                            int columnSize = 0;
                                            columnSize = Integer.parseInt(request.getAttribute("COLUMNSIZE").toString());
                                            System.out.println("Here 111111 :::::::::::::: " columnSize);

                                            for(int loop=0 ; loop < columnSize ; loop  ){
                                    %>

                                    <h:column>
                                        <f:facet name="header" >
                                            <h:outputText value="Field <%=loop%>">
                                            </h:outputText>
                                        </f:facet>
                                        <h:outputText value="Password" />
                                    </h:column>

                                    <%
                                        }
                                        }
                                    %>

                                </h:dataTable>
  

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

Так что, если у кого-то из вас есть идеи по этому поводу, пожалуйста, ответьте мне быстро.

Комментарии:

1. Удалены ненужные теги, вы можете изменить, если они не подходят

Ответ №1:

Если я правильно прочитал ваш вопрос, вы хотите динамически изменять количество столбцов вашей DataTable (возможно, я ошибаюсь).

Если вы работаете с icefaces или richfaces, почему бы вам не использовать ice:columns or rich:columns ?

Комментарии:

1. я не занимаюсь ни тем, ни другим.. я использую чистый JSF

2. итак, почему вы используете теги richfaces / icefaces? Кстати. удобным способом достижения этого является использование библиотеки компонентов (например, rich-/ ice- / primefaces)

Ответ №2:

Скриплеты не следует путать с выражениями JSF. Приведенный ниже код можно использовать для достижения того, что вы уже пытаетесь, помещая логику в вспомогательный компонент и выглядит более читаемым.

 <ui:repeat value="#{backingBean.headerNames}" var="header">
                 <li> 
                      <h:outputText value="#{header.field}" />
                 </li> 
</ui:repeat>
  

Для получения дополнительной информации ознакомьтесь с документацией JSF EL

Комментарии:

1. Я пытаюсь так, как вы сказали, но он выдает следующую ошибку <h: идентификатор столбца =»поле #{параметр [‘цикл’]}»> — Синтаксис [org.apache.catalina.core. Контейнерная база. [jboss.web]. [localhost]. [/ timesascentadmin]. [jsp]] Servlet.service() для сервлета jsp выдал исключение java.lang. Исключение IllegalArgumentException: последующими символами идентификатора компонента должны быть буква, цифра, подчеркивание (‘_’) или тире (‘-‘)! Но идентификатор компонента содержит «#»

2. Отредактированный ответ для достижения того же, но с элементами facelets.

Ответ №3:

Может быть, это его работа.

 HtmlOutputText test = new HtmlOutputText();
test.setValue("test");

HtmlDataTable dataTable = new HtmlDataTable();
dataTable.getChildren().add(test);