Как мы все знаем, класс действий Strut2 может получить все соответствующие значения с помощью атрибутов, таких как параметры запроса, параметры конфигурации действия, передача значений атрибутов другим действиям (через результаты цепочки) и т. Д. Чтобы получить эти значения параметров, единственное, что мы должны сделать, - это объявить свойство с тем же именем, что и параметр в классе действий. Перед тем, как Struts2 вызывает метод действия класса действия (по умолчанию метод выполнения), будет назначено соответствующее свойство действия.
Чтобы завершить эту функцию, Struts2 в значительной степени зависит от объекта ValueStack. Этот объект проходит через весь жизненный цикл действия (каждый экземпляр объекта действия будет иметь объект ValueStack). Когда Struts2 получит запрос .Action, он сначала создаст экземпляр объекта класса действий, но не вызовет метод действия, но сначала поместит соответствующие свойства класса действий в узле верхнего уровня объекта ValuESTACK (объект ValuESTACK эквивалентен стеке). Просто все значения атрибутов являются значениями по умолчанию, такими как значение атрибута типа строки, является нулевым, значение атрибута типа int равно 0 и т. Д. И т. Д.
После обработки вышеупомянутой работы Struts2 вызовет перехватчика в цепочке перехвата. После вызова всех перехватчиков будет вызван метод действия класса действия. Перед вызовом метода действия значение атрибута в узле верхнего уровня объекта ValueStack будет назначено соответствующему атрибуту в классе действия. Каждый должен обратить внимание, это приносит нам большую гибкость. То есть во время процесса Struts2, вызывая перехватчик, значение атрибута в объекте ValueStack можно изменить. Когда определенное значение атрибута изменяется, соответствующее значение атрибута класса действия станет значением последнего изменения атрибута в перехватчике.
Из приведенного выше описания легко узнать, что в классе действий Struts2 вы можете получить значения параметров с тем же именем, что и атрибут, которые обрабатываются различными перехватчиками. Например, перехватчик, который получает параметры запроса,-это параметры, и перехватчик, который получает параметры конфигурации действия, являются StaticParams и т. Д. Считайте соответствующие значения внутри этих перехватчиков и обновляют значения соответствующих свойств узла верхнего уровня объекта ValueDack. Объект ValueStack похож на конвейерную ленту, передавая значение атрибута от одного перехватчика другому перехватчику (конечно, в течение этого времени значение атрибута может измениться), и, наконец, передавать его объекту действия, и конечное значение атрибута в объекте ValuEStack назначается соответствующим атрибуту класса действия.
Когда мы используем EL Expressions в слое дисплея, мы можем не только получить доступ к свойствам в 11 скрытых объектах в выражении EL, но и получить доступ к значениям свойств объекта в ValuEStack, поскольку StrUTS2 дополнительно инкапсулирует httpservletrequest.
открытый класс StrutSrequestWrapper extends httpservletrequestwrapper {public strutsrequestwrapper (httpservletrequest req) {super (req);} public getAttribute (String s) {...... actionContext ctx = actionContext.getContext () at attribute = super.getTtruity (s) attrubtibute (s) attribute (s) attribute (s) attribute (s) attruit attribute (s); (ctx! = null) {if (attribute == null) {// Если значение атрибута не найдено из диапазона запросов, то есть значение атрибута объекта найдено из ValueStack ... ValueStack Stack = ctx.getValueStac valueStack ...}} return attribute;}}Суммировать
Выше приведено в этой статье о том, как Strut2 инкапсулирует параметры запроса, и я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!