Как передать 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 в итераторе, но без везения.

Вопросы:

  1. Каков будет правильный путь к этому?

  2. Есть ли более элегантное решение для этого случая, когда вы хотите устранить дублирование кода в ваших 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 - это шаблонная структура, разработанная для простого создания страниц веб-приложений с единообразным интерфейсом. Может использоваться как для оформления страницы, так и для компонентизации.


Существуют плагины интеграции Tiles 2 и Tiles 3.

Другие вопросы по тегам