| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
| Я не вижу другого способа, кроме как честно использовать рефлекшн. |
| Автор: 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 не используемые данные, и уже там проверять,получилось проще+не так много байтов улетает |