Как передать объект из класса действий в JSP с помощью Bean в Struts2?

Я должен отправить объект класса Bean обратно в JSP из моего класса действий. Я создаю экземпляр класса Bean в своем классе действия и устанавливаю некоторые значения в своем классе Action.

ElasticitiesVariable elasticitiesVariable = new ElasticitiesVariable();
elasticitiesVariable.setAuto_Auto_cost_peak("-0.047");  
elasticitiesVariable.setAuto_Ride_cost_peak("0.000");
elasticitiesVariable.setAuto_Van_cost_peak("0.000");
elasticitiesVariable.setAuto_Transit_cost_peak("0.050");
elasticitiesVariable.setAuto_Bike_cost_peak("0.000"); 

и в моем JSP я также объявляю класс бобов.

<s:bean name="org.apache.struts.register.model.ElasticitiesVariable" var="elasticitiesBean" />
<td class="edit_area">
   <s:property value="#elasticitiesBean.auto_Auto_cost_peak" /></td>

в бобовом классе я объявил переменную private с публичным getter и setter. Но значения в JSP будут нулевыми. После отладки я обнаружил, что в классе действий нет проблем. Но когда команда переходит в класс бина, значения становятся null,

1 ответ

Решение

Первый раз вы создаете экземпляр компонента в действии, второй раз в JSP. Это не тот бин, который вы заполнили в действии, и он не содержит значений. Если вы хотите получить значения из первого компонента, вы должны создать мутаторы для переменной, которая содержит экземпляр компонента. Вы также должны создать мутаторы для доступа к свойствам этого компонента. В JSP у вас есть доступ к первому компоненту, потому что экземпляр действия находится на top из valueStack, Просто используйте

<s:property value="elasticitiesBean.auto_Auto_cost_peak" />

Обратите внимание, что без # OGNL не будет искать другие переменные, он будет смотреть прямо в valueStack, Но не делай этого внутри bean тег, потому что новый (второй) экземпляр помещается в valueStack и поиск выполняется сверху вниз, поэтому он может соответствовать свойствам компонента. Просто удалите bean тег.

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