Как передать List как параметр из одного JSP во включенный JSP в Struts2?
Представьте, что вы хотите, чтобы приведенный ниже фрагмент кода JSP находился на нескольких страницах, где единственное, что меняется, - это список, который ему передается (ххх в примере).
<s:iterator value="%{#xxx}" var="module" status="stat">
<s:property value="#module.name"/>
</s:iterator>
Моей первой идеей было бы поместить это в myFragment.jsp
и использовать s:include
на других страницах, чтобы включить его и передать список в виде s:param
, лайк:
<s:include value="/myFragment.jsp">
<s:param name="xxx" value="%{#myModules}"></s:param>
</s:include>
Проблема в том, что <s:param>
кажется, передает только строки, поэтому приведенный выше код не работает.
Я также пытался использовать <s:set var="myParam">${param.xxx}</s:set>
(и попробуй поставить myParam
в итераторе, но без везения.
Вопросы:
Каков будет правильный путь к этому?
Есть ли более элегантное решение для этого случая, когда вы хотите устранить дублирование кода в ваших JSP, путем рефакторинга общего кода в унифицированное место?
Изменить (пример):- Пример, где у вас есть Page1.jsp
а также Page2.jsp
, Оба используют очень похожие s:iterator
единственное отличие - переменная, передаваемая ему. Цель состоит в том, чтобы s:iterator
в какое-то место, чтобы вы написали это только один раз
Естественно, в реальной жизни кода больше, чем просто s:iterator
быть реорганизованным.
Page1.jsp:
<s:action name="MyAction" var="xxx"></s:action>
<s:iterator value="%{#xxx}" var="module" status="stat">
<s:property value="#module.name"/>
</s:iterator>
Page2.jsp:
<s:iterator value="%{#variableFromStack.modules}" var="module" status="stat">
<s:property value="#module.name"/>
</s:iterator>
1 ответ
Я не вижу смысла передавать параметры в тег s:include. Обратите внимание, что параметры доступны только как параметры запроса:
Параметры передаются как параметры запроса, поэтому используйте
${param.ParamName}
запись для доступа к ним. Не используйтеs:property
тег для доступа к параметрам во включаемых файлах.
Правильный путь - это нажать параметры на valueStack
,
Элегантное решение - использовать фреймворк Tiles.
Tiles - это шаблонная структура, разработанная для простого создания страниц веб-приложений с единообразным интерфейсом. Может использоваться как для оформления страницы, так и для компонентизации.