Объявить функцию в JSP
От: eiNtiel  
Дата: 04.03.08 14:21
Оценка:
Можно объявить функцию так:
<%! void foo(){
    System.out.println("foo()");
}%>


А мне надо как-то так:
<%! void foo(){
    System.out.println("foo()");
    %>
    <br>foo in page<br>
<%
}%>

Но ругается...

Пробую изменить скриплет:

<%! void foo(){
    System.out.println("foo()");
    %>
    <br>foo in page<br>
<%!
}%>

Компилится без ругани, но при вызове этой функции несколько раз <br>foo in page<br> на странице появляется только 1 раз.

Вобщем объяснил наверное сумбурно, нужно объявить на странице функцию внутри которой будет формироваться html код, и желательно стандартными jsp методами, а не String'ами после кот. читать будет сложно. Возможно такое?
Re: Объявить функцию в JSP
От: Blazkowicz Россия  
Дата: 04.03.08 15:06
Оценка:
Здравствуйте, eiNtiel, Вы писали:

N>Вобщем объяснил наверное сумбурно, нужно объявить на странице функцию внутри которой будет формироваться html код, и желательно стандартными jsp методами, а не String'ами после кот. читать будет сложно. Возможно такое?

Не извращайся. Тебе дуже сложно сообразить как это должно работать. А представь человека которому придется читать подобный код? Вынеси код отдельно. Не надо делать методы в JSP. Используй таглибы для того чтобы завязать HTML на логику.
Ради спортивного интереса в поисках ответа на вопрос "почему не работает" можешь поискать класс-сервлет, который сформировал контейнер. И посмотреть во что твой код трансформировался.
Re[2]: Объявить функцию в JSP
От: eiNtiel  
Дата: 05.03.08 07:31
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

Тут не ради извращения, повторяется в нескольких местах один и тот же код такого вида:
<tr align="center" class="<%=inall ? "summary_stat" : ""%>">
            <td <%=rh.ifAdvStyle()%>><%=row.get("DOR_KOD")%></td>
            <td><%=inall ? "Всего" : row.get("DOR")%></td>
            <td <%=rh.ifAdvStyle()%>><%=row.get("PREDNOD_ID")%></td>
            <td><%=row.get("PREDNOD")%></td>
            <td><%=row.get("PODKL")%></td>
            <td><%=row.get("RAB")%></td>
        </tr>


Хотелось бы естественно оформить ввиде функции. И так чтобы осталось html форматирование, а не такое уродство
"<tr align=\"center\" class=\"" + inall ? "summary_stat" : "" + "\">"


Как это сделать кроме как функцией даже не представляю

Преобразовывается такая страница:

<%! void foo(){
    System.out.println("foo()");
    %>
    <br>foo in page<br>
<%!
}%>

<%
        for(int i = 0; i < 10; ++i) {
            foo();
        }
%>


вот в енто:
void foo(){
  System.out.println("foo()");
}

public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws java.io.IOException, ServletException {
  ...
  out.write("<br>foo in page<br>\r\n");
  
  for(int i = 0; i < 10; ++i) {
    foo();
  }
  ...
}

Не понятно только почему
Re[3]: Объявить функцию в JSP
От: eiNtiel  
Дата: 05.03.08 07:54
Оценка: 1 (1) :))
Решение найдено. Получилось через метод inner класса.
<%
    class a {
        public void bar(JspWriter out)  throws java.io.IOException {
            %><br>bar in page<br><%
        }
    }
%>


<%
for(int i = 0; i < 10; ++i) {
  new a().bar(out);
}
    %>
Re[4]: Объявить функцию в JSP
От: Аноним  
Дата: 05.03.08 10:50
Оценка: +2
Это пипец.
"Решение найдено".
Скриплеты в jsp должны быть в крайнем случае. Причем крайний случай в 99% можно обойти.
Лучше сразу убери этот код, любой здравомыслящий человек его зарефакторит в процессе сопровождения.
Re[5]: Объявить функцию в JSP
От: eiNtiel  
Дата: 05.03.08 11:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Это пипец.

А>"Решение найдено".
А>Скриплеты в jsp должны быть в крайнем случае. Причем крайний случай в 99% можно обойти.
А>Лучше сразу убери этот код, любой здравомыслящий человек его зарефакторит в процессе сопровождения.

Решение найдено в контексте вопроса, и полностью ему удовлетворяющее. Впринципе вопрос выше, если есть предложения, с удовольствием выслушаю.
Теперь по скриплетам. Можно узнать чем они так плохи? Цель разделения логики и представления в нашем случае сомнительна, нет разделения на кодеров и дизайнеров, делают одни и теже люди. Сложно читать код скажете... а вот такой html:
...
"<tr align=\"center\" class=\"" + inall ? "summary_stat" : "" + "\">"
...

читать тоже не лучший вариант, кот. довольно часто будет требоваться выплевывать ввиде строк при разделении. Какие еще минусы есть у подобного подхода?
Re[6]: Объявить функцию в JSP
От: LeonidV Ниоткуда http://vygovskiy.com
Дата: 05.03.08 11:51
Оценка:
Здравствуйте, eiNtiel, Вы писали:

А>>Лучше сразу убери этот код, любой здравомыслящий человек его зарефакторит в процессе сопровождения.


N>Решение найдено в контексте вопроса, и полностью ему удовлетворяющее. Впринципе вопрос выше, если есть предложения, с удовольствием выслушаю.

Если вы спросите на форуме поклонников оружия как лучше всего повесится, вам может и дадут ответ. Но скорее посоветуют более надежное средство в виде пистолета.
Также и здесь. Намылить веревку вы догадались, но по возможности лучше вообще сейчас JSP не использовать. А если использовать, выносить такие вещи в taglibs.
Кстати, вы еще одну грубейшую ошибку делаете — работаете с БД из JSP. Это уж точно должно быть в сервлете.
http://jvmmemory.com — простой способ настройки JVM
Re[7]: Объявить функцию в JSP
От: eiNtiel  
Дата: 05.03.08 12:01
Оценка:
Здравствуйте, LeonidV, Вы писали:

LV>Здравствуйте, eiNtiel, Вы писали:


А>>>Лучше сразу убери этот код, любой здравомыслящий человек его зарефакторит в процессе сопровождения.


N>>Решение найдено в контексте вопроса, и полностью ему удовлетворяющее. Впринципе вопрос выше, если есть предложения, с удовольствием выслушаю.

LV>Если вы спросите на форуме поклонников оружия как лучше всего повесится, вам может и дадут ответ. Но скорее посоветуют более надежное средство в виде пистолета.
LV>Также и здесь. Намылить веревку вы догадались, но по возможности лучше вообще сейчас JSP не использовать. А если использовать, выносить такие вещи в taglibs.
Так вот я и хочу выяснить что такого ненадежного в скриплетах. Проблем пока не было.

LV>Кстати, вы еще одну грубейшую ошибку делаете — работаете с БД из JSP. Это уж точно должно быть в сервлете.

Не совсем понимаю в чем разница. JSP итак будет преобразована в сервлет
Re[8]: Объявить функцию в JSP
От: vb-develop  
Дата: 05.03.08 12:20
Оценка: 1 (1) -2 :)
Здравствуйте, eiNtiel, Вы писали:

N>Здравствуйте, LeonidV, Вы писали:


LV>>Кстати, вы еще одну грубейшую ошибку делаете — работаете с БД из JSP. Это уж точно должно быть в сервлете.

N>Не совсем понимаю в чем разница. JSP итак будет преобразована в сервлет

Зачем нужен С++, все равно потом в машинный код программа будет преобразована.
Re[9]: Объявить функцию в JSP
От: eiNtiel  
Дата: 05.03.08 12:32
Оценка: -1
Здравствуйте, vb-develop, Вы писали:

LV>>>Кстати, вы еще одну грубейшую ошибку делаете — работаете с БД из JSP. Это уж точно должно быть в сервлете.

N>>Не совсем понимаю в чем разница. JSP итак будет преобразована в сервлет

VD>Зачем нужен С++, все равно потом в машинный код программа будет преобразована.


Перечитай свою аналогию, она "ЗА" мое утверждение а не против. Ну и никакого конструктива в сообщении
Re[6]: Объявить функцию в JSP
От: Blazkowicz Россия  
Дата: 05.03.08 12:44
Оценка:
Здравствуйте, eiNtiel, Вы писали:

N>Теперь по скриплетам. Можно узнать чем они так плохи? Цель разделения логики и представления в нашем случае сомнительна, нет разделения на кодеров и дизайнеров, делают одни и теже люди.

Цель разделения логики и представления не состоит в организации работы HTML и Java кодеров. А в том чтобы добится меньшей связности путем инкапсуляции HTML в шаблоне, а Java в Java классе.

N>Сложно читать код скажете... а вот такой html:

N>
N>"<tr align=\"center\" class=\"" + inall ? "summary_stat" : "" + "\">"
N>

N>читать тоже не лучший вариант, кот. довольно часто будет требоваться выплевывать ввиде строк при разделении. Какие еще минусы есть у подобного подхода?
Никто не говорил что HTML держать в коде лучше. Ты таглибы пробовал на вкус?
Re[4]: Объявить функцию в JSP
От: dshe  
Дата: 05.03.08 16:13
Оценка:
Здравствуйте, eiNtiel, Вы писали:

N>Решение найдено. Получилось через метод inner класса.


+1 за оригинальнось. Я бы до этого не додумался.

Что касается задачи, то если действительно нужно использовать исключительно скриплеты, то можно рассмотреть еще вариант выделить повторяющиеся куски html/jsp кода в отдельные jsp и инклудить их там где надо.
--
Дмитро
Re[10]: Объявить функцию в JSP
От: Аноним  
Дата: 05.03.08 17:20
Оценка: +1
Здравствуйте, eiNtiel, Вы писали:

N>Здравствуйте, vb-develop, Вы писали:


LV>>>>Кстати, вы еще одну грубейшую ошибку делаете — работаете с БД из JSP. Это уж точно должно быть в сервлете.

N>>>Не совсем понимаю в чем разница. JSP итак будет преобразована в сервлет

VD>>Зачем нужен С++, все равно потом в машинный код программа будет преобразована.


N>Перечитай свою аналогию, она "ЗА" мое утверждение а не против. Ну и никакого конструктива в сообщении


Уважаемый,
Ваше упорство в вопросе достойно восхищения. Да вы правы!! А еще можно всю программу на JSP написать, и БД самому тоже на JSP. Круто выйдет. Продолжайте настаивать на своем и ни в коем случае не читайт уйму литературы про tayers & layers.
Re[7]: Объявить функцию в JSP
От: eiNtiel  
Дата: 05.03.08 21:19
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Цель разделения логики и представления не состоит в организации работы HTML и Java кодеров. А в том чтобы добится меньшей связности путем инкапсуляции HTML в шаблоне, а Java в Java классе.

Те примеры что мне приходилось видеть, даже при разделении, в java файлы всеравно попадал html ввиде стрингов (пускай и не много но был), а jsp не обходилась без пускай небольшого но наличия скриплетов. Так тогда почему бы элементарную логику не оставить ввиде скриплетов? Я не говорю о каких то серьезных алгоритмах, создания коннектов к бд и т.д. Я говорю о простейших небольших циклах, элементарной логике обхода резалт сета и тп вещах. Городить изза такой примитивщины бины или классы для jsp тегов целесообразно ли? Я прекрасно знаю и не однократно встречал рекомендации не использовать скриплеты по возможности и пробовал без них, только вот особого удобства не заметил. У нас выходные формы проекта большей частью состоият из jsp страниц со скриплетами и может это покажется глупым, но нас это вполне устраивает и даже кажется удобным. Напоминаю я говорю о элементарной логике в скриплетах, без которой страница не обойдется, не пихая туда все подряд.

N>>Сложно читать код скажете... а вот такой html:

N>>
N>>"<tr align=\"center\" class=\"" + inall ? "summary_stat" : "" + "\">"
N>>

N>>читать тоже не лучший вариант, кот. довольно часто будет требоваться выплевывать ввиде строк при разделении. Какие еще минусы есть у подобного подхода?
B>Никто не говорил что HTML держать в коде лучше. Ты таглибы пробовал на вкус?
Очень поверностно, но как я понимаю если задача получить из таглиба кусок html его придется в java файле прописывать опять же стрингом. А если только данные получить, то с тем же успехом можно обратиться к методу необходимого класса из скриплета, это чем то хуже?
Re[5]: Объявить функцию в JSP
От: eiNtiel  
Дата: 05.03.08 21:24
Оценка:
Здравствуйте, dshe, Вы писали:

D>Здравствуйте, eiNtiel, Вы писали:


N>>Решение найдено. Получилось через метод inner класса.


D>+1 за оригинальнось. Я бы до этого не додумался.

D>Что касается задачи, то если действительно нужно использовать исключительно скриплеты, то можно рассмотреть еще вариант выделить повторяющиеся куски html/jsp кода в отдельные jsp и инклудить их там где надо.

Ага, такокой вариант тоже рассматривался, но приходится разделять файлы а это тоже не очень удобно. С кусками кода без начала и конца, полная картина которых становится понятна только ввиде единой jsp страницы разобраться еще сложнее.
Re[11]: Объявить функцию в JSP
От: eiNtiel  
Дата: 05.03.08 21:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Уважаемый,

А>Ваше упорство в вопросе достойно восхищения. Да вы правы!! А еще можно всю программу на JSP написать, и БД самому тоже на JSP. Круто выйдет. Продолжайте настаивать на своем и ни в коем случае не читайт уйму литературы про tayers & layers.

Напоминаю краткое содержание ветки (вольный перевод):
— Использую технологию X. Такая вот проблема. А все решил, вот так вот работает
— Ну пиндец. Решил он. Не один здравомыслящий человек так не пишет. Надо использовать технологии A, B, C... но не X
— А чем плохо то? Вот такие-то плюсы технологий A, B, C вызывают у меня сомнения
— Технологию X использовать не надо. Есть более надежные
— Так чем ненадежна X? У меня пока проблем не было
— *немного сарказма*
— Может всетки по существу?
— Ну ты пиндец упрямый. Я прочитал уйму литературы про A, B, C и какие они крутые. *ну и еще немного сарказма о X*
Re[12]: Объявить функцию в JSP
От: vb-develop  
Дата: 06.03.08 04:57
Оценка:
Здравствуйте, eiNtiel, Вы писали:

N>Здравствуйте, Аноним, Вы писали:


А>>Уважаемый,

А>>Ваше упорство в вопросе достойно восхищения. Да вы правы!! А еще можно всю программу на JSP написать, и БД самому тоже на JSP. Круто выйдет. Продолжайте настаивать на своем и ни в коем случае не читайт уйму литературы про tayers & layers.

N>Напоминаю краткое содержание ветки (вольный перевод):

N>- Использую технологию X. Такая вот проблема. А все решил, вот так вот работает
N>- Ну пиндец. Решил он. Не один здравомыслящий человек так не пишет. Надо использовать технологии A, B, C... но не X
N>- А чем плохо то? Вот такие-то плюсы технологий A, B, C вызывают у меня сомнения
N>- Технологию X использовать не надо. Есть более надежные
N>- Так чем ненадежна X? У меня пока проблем не было
N>- *немного сарказма*
N>- Может всетки по существу?

По существу речь о том, что написание и поддержка (внесение изменений) с использованием технологии Х на порядок дешевле (т.к. легче, удобнее, меньше потенциальных ошибок, быстрее) чем технологии Y.
Re[6]: Объявить функцию в JSP
От: elmal  
Дата: 06.03.08 06:32
Оценка:
Здравствуйте, eiNtiel, Вы писали:

N>Ага, такокой вариант тоже рассматривался, но приходится разделять файлы а это тоже не очень удобно. С кусками кода без начала и конца, полная картина которых становится понятна только ввиде единой jsp страницы разобраться еще сложнее.

Круто, если я правильно понимаю, ты не признаешь не только разделение логики и представления, но и дробление крупных кусков кода на более мелкие. Мне даже страшно представить что там в коде такое творится. И я ОЧЕНЬ сочувствую тем, кто потом будет это сопровождать и дописывать. Как замену смертной казни можно придумать наказание, если кому-то придется копаться в таком коде — человек моментально сам повесится .
Re[7]: Объявить функцию в JSP
От: eiNtiel  
Дата: 06.03.08 06:54
Оценка:
Здравствуйте, elmal, Вы писали:

E>если я правильно понимаю, ты не признаешь не только разделение логики и представления, но и дробление крупных кусков кода на более мелкие.


Если этот кусок не является отдельной сущностью, или каким то логически завершенным блоком, а просто кусок — то да, я думаю выделение в отдельный файл не лучшая идея.
Re[12]: Объявить функцию в JSP
От: dshe  
Дата: 06.03.08 08:30
Оценка: 3 (2) +2
Здравствуйте, eiNtiel, Вы писали:

N>Напоминаю краткое содержание ветки (вольный перевод):

N>- Использую технологию X. Такая вот проблема. А все решил, вот так вот работает
N>- Ну пиндец. Решил он. Не один здравомыслящий человек так не пишет. Надо использовать технологии A, B, C... но не X
N>- А чем плохо то? Вот такие-то плюсы технологий A, B, C вызывают у меня сомнения

Имея возможность вставить кусок java кода в любое место html кода с одной стороны дает тебе некоторую свободу, а с другой стороны лишает тебя возможности контролировать как валидность генерируемого html'я, так и валидность java кода, который генерит страницу.
Пример.
<% for (int i = 0; i < N; ++i) { %>
</ul>
<% } %>

Возможно, автор такого кода помнит, что где-то выше он N раз открыл <ul> tag и теперь нужно его N раз закрыть, и помнит к чему относится единственная закрывающая фигурная скобка в скриплете. Однако, для другого человека, даже если он разбирается и в java и в html, это будет не так очевидно. Что самое неприятное, что найти источник проблемы, если html сформировался неправильно, или jsp нескомпилировалась, бывает весьма непросто. С taglib'ами также возможны описанные проблемы, однако они не имеют такого масштаба.

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

Что касается технологий A, B и C, то они, может, и не в состоянии решить именно ту с которой ты столкнулся, однако они могут избавить тебя от решения этой проблемы приняв на себя ответственность по генерации типичных кусков html кода. Т.е. вместо генерации таблицы вручную, ты мог бы использовать некий компонент, который бы сгененрил бы всю таблицу сам по неким данным-метаданным (например, по пропертям java bean'а).
--
Дмитро
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.