Создание тега Struts2 из пользовательского тега - PullRequest
0 голосов
/ 04 марта 2011

Я пытаюсь записать тег Struts2 в мой JSP из пользовательского тега. У меня есть код ниже. Это действительно возможно, или есть что-то в жизненном цикле JSP, которое делает это невозможным? Если это невозможно, есть ли другой способ сделать то, что я пытаюсь сделать?

        while (iterator.hasNext()) {
            Bulletin bulletin = (Bulletin) iterator.next();
            if (bulletin.isApproved()) {
                out.println("<s:url value=\"GetSingleBulletin\">");
                out.println("<s:param name=\"id\" " 
                        + "value=\"%{" + bulletin.getId()+ "}\" />");
                out.println(bulletin.getName() + " -- " + bulletin.getSubject() 
                        + " " + bulletin.getDate());
                out.println("</s:url>");
                out.println("<br><br>");
            }
        }

Ответы [ 2 ]

0 голосов
/ 04 сентября 2013

Нет, это невозможно. Out.println разрешен только в html tag.fa

0 голосов
/ 04 марта 2011

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

Вместо этого я бы предложил просто выдать эквивалентный HTML (на самом деле просто URL с параметрами, учитывая ваш код выше). Предполагая, что ваша проблема не сложнее, чем то, что вы описали выше, это кажется самым простым подходом. На самом деле, даже если бы вы могли генерировать теги, я не вижу здесь убедительного аргумента в пользу того, почему теги в любом случае будут лучше, чем необработанный HTML. Предполагается, что теги JSP облегчают автоматизацию и сокращают объем кода, где это возможно; меньше кода уменьшает количество ошибок и делает JSP более удобными в обслуживании. Но ваш случай выше не тот, который кричит "обязательно используйте теги".

В качестве альтернативы, если вы действительно предпочитаете использовать теги, которые есть в вашем пользовательском теге выше, или вы хотите полностью исключить свой taglib, вы можете написать приведенный выше Java-код в скриптлете и перемежать использование другого. теги Struts между этим кодом скриптлета. Итак, что-то вроде:

<%
        while (iterator.hasNext()) {
            Bulletin bulletin = (Bulletin) iterator.next();
            if (bulletin.isApproved()) {
%>
                <s:url value="GetSingleBulletin">
etc.

<%
            }
        }
%>
...