Как передать объект из класса действий в 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
тег.