Я недавно изучал SSH, и я не понял разницы между $,%,%и#. Я сделал несколько небольших упражнений и постепенно понял немного. Я запишу то, что узнал.
Существует следующая сущность:
Public Class Person {Private Int ID; Приватное название строки; public int getId () {return id; } public Person (int id, string name) {super (); this.id = id; Имя = имя; } public Person () {super (); } public void setId (int id) {this.id = id; } public String getName () {return name; } public void setName (String name) {name = name; }} В действии Struts2 написан следующий код:
@Override public String execute () бросает исключение {// Приложение Person P = новый человек (1, "Zhangsan"); ActionContext.getContext (). GetApplication (). PUT ("ЧЕЛОВЕК", P); // сессионное лицо P1 = новый человек (3, "wangwu"); ActionContext.getContext (). GetSession (). PUT («Человек», P1); // запросить человека P2 = новое лицо (2, "Лиси"); ActionContext.getContext (). PUT ("Человек", P2); // ServletContext Person P3 = новый человек (5, "Xiaoming"); ActionContext.getContext (). GetContextMap (). Put ("Человек", P3); Человек P4 = новый человек (3, "Вангу"); ActionContext.getContext (). GetValuEStack (). Push (p4); вернуть "успех"; } Храните объект человека в приложении, сеансе, запросе, сервистском контексте, ValueStack, соответственно. Затем в JSP мы можем получить его следующим образом:
Человек: <input type = "text" name = "name" value = "$ {person}" /> <br /> id: <input type = "text" name = "name" value = "$ {person.id}" /> <br /> name: <input type = "text" name = "value =" $ {person.name} " /> <br /> <Hr> Информация о лице, полученная приведенным выше кодом, - это Xiaoming, то есть информация, хранящаяся в ActionContext.getContext (). GetContextMap (). Запрашивая использование $, обнаружено, что есть способ получить объект $, то есть
ActionContext.getContext (). GetContextMap ()> actionContext.getContext ()> actionContext.getContext (). GetSession ()> actionContext.getContext (). GetApplication (). Для объектов с одинаковым именем существуют в разных областях (области), метод поиска $ будет выполняться в соответствии с вышеуказанными этапами. Если это найдено, это будет вывод. Если это не найдено, он будет продолжать искать на предыдущем уровне. Когда вершина не существует, он выведет NULL.
Тогда использование $ равна: $ {scope.object.attribute}
Значение атрибута охвата - запрос, сеанс, приложение. Когда они не записаны по умолчанию, вы будете искать в соответствии с вышеуказанной схемой. Если вы найдете его, вы выведете соответствующее значение атрибута.
В теге стойки сохранить:
<S: Property Value = "#Application.person"/>
Видно, что номер # использовался в это время. Я лично думаю, что использование # и $ на самом деле то же самое. Пока вы загружаете объект, вам необходимо вывести в карту (ServletContext, запрос, сеанс и приложение) в другом диапазоне, при отображении его в представлении, используя <S: Property Value = "#scope.object.attribute"> совсем то же самое, что и понимание $. Но когда вы используете теги стойки, например:
<S: Textfield name = "person.name"> </s: Textfield>
Это можно понять полностью как
<input type = "text" name = "persom.name" id = "person.name" value = "<s: значение свойства ="#person.name " />" />
То есть тег стойки была инкапсулирована для нас в HTML Text <s: свойство value = "#target.name"/>, который может спасти меня много кода.
Точно так же использование #: <s: value = " # scope.object.attribute" />
Конечно, вы можете использовать теги, определенные Struts2, чтобы сохранить хлопот из написания слишком много дублирующихся кодов. На самом деле, # имеет другие применения, такие как построение таких объектов, как карты, но я лично считаю, что эра написания слишком большого количества кода в представлении прошла, и это использование не имеет значения. Более того, на этот раз я только написал процесс отображения его в представлении, поэтому я не буду говорить об этом в другом месте.
Наконец, давайте поговорим об использовании %. Проще говоря, %{} - это выражение расчета строки. Например, в представлении есть определенная ссылка, которая обычно имеет основные функции, такие как CRUD. Для функций добавления и обновления он может быть завершен на той же странице. Разница в том, что адрес, который мы отправляем, другой. Например, это может быть точно так: для метода добавления адрес aSter_Add.Action, а для метода UDPATE Адрес - user_update.action, поэтому в форме можно использовать для суждения:
<s: form action = "user _%{id == 0? '' Add ':' update '}"> </form> Ха -ха, поэтому две предыдущие страницы теперь могут быть решены на одну страницу.
Точно так же % используется чаще с метками суждения, такими как если и ifelse в стойках. В конце концов, это сравнение? Полем Полем Полем
<S: если тест = "%{false}"> <div> не будет выполнено </div> </s: if> <s: else test = "%{true}"> <div> будет выполнено </div> </s: elseif> <s: else> <div> не будет выполнено </div> </s: else> <s else> <div>. Наконец, давайте поговорим о полезном подходе этого %, предполагая, что существует список, показывающий все проходящие оценки учащихся (то есть неудачные оценки не будут отображаться выше), если используемые % будут очень просты. Нет, просто положите код на первое место:
Общедоступный класс stduent реализует java.io.serializable {private static final long serialversionuid = -691038814755396419l; частный INT ID; Приватное название строки; частный балл; частная строковая тема; public int getId () {return id; } public void setId (int id) {this.id = id; } public String getName () {return name; } public void setName (string name) {this.name = name; } public int getScore () {return Score; } public void setScore (int chold) {this.score = comp; } public String getSubject () {return toot; } public void setSubject (строка субъекта) {this.subject = subject; } / ** * Здесь мы судим, сдает ли оценка экзамен * @param socre * @return * / public boolean ispast (int socre) {return getScore ()> 60; }} Итак, теперь посмотрите оценки студентов в базе данных и поместите их в список для временного хранения. На странице JSP мы можем использовать следующий код, чтобы управлять тем, пройдет ли вывод системы класса:
<S: Итератор value = "#alluser"> <!- Определите, следует ли передать строку, если вы передадите строку, она будет выходить, иначе вы отдадите ее! -> <S: if test = "#session.user.ispast (score)"> name: <s: textfield name = "name"> </s: textfield> Оценка: <s: textfield name = "score"> </s: textfield>/subject: <s: Textfield name = "Субъект"> </s: textfield> </s: if> </s: Iterator>
Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!