Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > jsp динамический c out value


Автор: implements 18.3.2015, 10:07
Добрый день
нужно элегантно отобразить данные в jsp
к примеру получаю myObject который имеет количество полей countFields ну и сами поля field1,filed2 e.t.c
вот нужно отобразить filed,  если countFileds =3, то вывести field1,field2,field3 и т.д.
как можно это сделать в jsp?
попробовал банальную конкатинацию,
<c:forEach var="i" begin="1" end="${myObject.countFields }">
  <c:out value=' ${myObject.field+i}'/>
</c:forEach>
понятно что получил бред =)

Автор: AntonSaburov 18.3.2015, 12:48
Я не вижу другого способа, кроме как честно использовать рефлекшн.

Автор: implements 18.3.2015, 12:52
Цитата(AntonSaburov @  18.3.2015,  12:48 Найти цитируемый пост)
Я не вижу другого способа, кроме как честно использовать рефлекшн.

не совсем понял, можете объяснить, ну или ткнуть в пример

Добавлено через 1 минуту и 54 секунды
а вроде понял, нууу в jsp этого не хотелось бы, ну раз нет других способов попробую, этот

Автор: mbasil 25.3.2015, 19:35
А не проще ли заменить набор полей на коллекцию?
Если только вы не пытаетесь написать что-то супер универсальное, то есть, если класс может быть любым. В этом, последнем случае без рефлекшн не обойтись никак -даже не пытайтесь.
-----------------------------------------------------------------------------------------------------------------
Написал, но вскоре пришло в голову "поганенькое" решение,
без использования рефлекшн - делегировать самому классу
выдавать массив строковых значений:

public class MyClass {

  private double price = 345.65;
  private java.util.Date dt = new java.util.Date();

  private static final SimpleDateFormat df =
             new SimpleDateFormat("dd.MM.yyyy");
  
  public String[] getFields() {
      String[] as = new String[2];
      as[0] = String.valueOf( price );
      as[1] = df.format( dt );
      return as;
  }

Автор: mbasil 28.3.2015, 17:17
Чтобы уж подытожить:
Мне кажется (судя по вопросу) вы пытаетесь организовать универсальный метод вывода строк из полей сущности в HTML, и, обратно: автоматические преобразования строковых полей формы в свойства сущности.
Подобную идею я пытался реализовать пару лет назад в виде библиотеки конвертора, состряпанной на основе Hibernate Validator. Как только начало что-то получаться, я понял, что дальше надо писать библиотеку пользовательских тегов для страницы. Несложно, но скучно, и как-то забросил, а вообще, мне кажется, идея неплоха. Что-то вроде JSF для решения конкретной задачи, только проще и без вывертов.

Автор: AntonSaburov 31.3.2015, 15:58
В итоге получится тот же JSF или Struts.

Автор: mbasil 31.3.2015, 17:53
Это так, но с небольшим отличием.
В JSF была реализована концепция валидатора, но она была неотделима от JSF. Спецификация на валидацию и решение в виде отдельных фреймворков, во-первых позволило осуществлять проверки на разных уровнях (включая Hibernate), не требуя при этом использования в некотором смысле тяжеловесного решения JSF. То есть такое решение "оторвало" валидацию от JSF.
А процесс конвертирования, по-видимому считается привязанным непосредственно к презентационному слою, и вроде как нет особого смысла отрывать его от JSF. Мне кажется это не так.
Вынесение валидации за пределы JSF и привязка описания с помощью аннотаций к полям Entity поменяла суть процесса. То же относится к конвертированию. Это действо - не суть исключительно вспомогательная операция презентационного слоя, а качество присущее Entity классам, то есть доменам полей.
Сегодня в большинстве случаев можно считать объекты Entity основными носителями данных, которые вполне могут инкапсулировать описание валидации и конвертирования с помощью аннотаций.
Другой код в Entity кроме "геттеров", "сеттеров"(пустых - без кода), а также hashCode(), equals(), toString() (и возможно compareTo()) просто не нужен.
Как не нужны всякие там ActionForm (Struts) и проч. Но, это только мое личное мнение (всегда есть возможность ошибиться).

Автор: implements 2.4.2015, 11:59
ну я сделал через рефлекцию, но не в jsp а в самом контроллере, не зачем отдавать во Views  не используемые данные, и уже там проверять,получилось проще+не так много байтов улетает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)