2010-05-05 3 views
0

Использование struts2 с jsp со стандартными библиотеками тегов расположений.Struts2 scriptlet

Я пытаюсь динамически скрыть DIV на загрузке страницы, но все равно отправлю его в браузер. Это значит, что я могу показать его позже через javascript.

Объекты запроса один и два нелегко ссылаются через тег jsp: usebean. (Они перечислены и не могут быть созданы) Я попытался использовать комбинацию s: if тегов или c: if тегов, и это просто выглядит уродливо.

<% 
    String displayStr = "display: none;"; 
    if(request.getAttribute("one") != null || request.getAttribute("two") != null ) { 
     displayStr = "display: block;"; 
    } 
%> 

<div id="next" style="<%=displayStr %>"> 

Любые предложения для лучшего способа сделать это?

ответ

0

Использование JSTL:

<c:set var="displayStr" value="display:none"/> 
    <c:if test="${!empty one || !empty two}"> 
     <c:set var="displayStr" value="display:block"/> 
    </c:if> 
    <div id="next" style="${displayStr}"> 
0

Тьфу, человек, который был уродлив. Позвольте мне проглотить, и дать вам альтернативу ... Ммм ... например, вы могли бы написать:

<div id="next" 
    style="display:<s:if test="divVisible">block</s:if><s:else>none</s:else>"> 

или же

<s:if test="divVisible"> 
    <s:set name="divStyle" value="%{'display:block'}"/> 
</s:if> 
<s:else> 
    <s:set name="divStyle" value="%{'display:none'}"/> 
</s:else> 

<div id="next" style="<s: property value="#divStyle">"> 

И тогда в вашем действии обеспечивают метод isDivVisible() который читать Params "один" и "два" (не из HTTPRequest!)

0

Просто используйте простой EL в текст шаблона:

<div id="next" style="display: ${(!empty one || !empty two) ? 'block' : 'none'}"> 

Использование скриптлетов обескуражило с более чем десятилетия. Они должны быть заменены taglib (Struts2, JSTL и т. Д.) И EL. Всякий раз, когда это невозможно, логика кода почти наверняка принадлежит к реальному классу Java, например, к объекту модели, сервлету (или действию Struts2) и т. Д.