При использовании struts2 я бы придерживался тегов struts2:
http://struts.apache.org/2.2.1/docs/tag-reference.html
<s:if test="%{false}">
<div>Will Not Be Executed</div>
</s:if>
<s:elseif test="%{true}">
<div>Will Be Executed</div>
</s:elseif>
<s:else>
<div>Will Not Be Executed</div>
</s:else>
Заметным отличием является то, что Struts2 использует OGNL.Его довольно просто использовать.
Я использую перехватчик, чтобы решить проблему проверки, вошел ли пользователь в систему или нет, и затем позволяет ему перейти на нужную страницу или направить его на экран входа в систему.
Основная процедура такова: создайте вход в действие, который помещает объект User в сеанс.Создайте журнал в перехватчике, который проверяет, есть ли в сеансе объект User, если перехватчик пропустит выполнение, если нет, он вернет «login», потребуется глобальное сопоставление «login» длядействие входа в систему ... тогда вы сделали.Ну, конечно, вам нужно добавить действие входа в этот стек, который будет использоваться в пакете «безопасных» действий.
Редактировать : Вот как я могу контролировать, если пользовательвидит ссылку «войти» или «выйти из имени пользователя» на странице:
<s:if test="#session['User']==null">
<s:a namespace="/public" action="welcome" >Login</s:a>
</s:if>
<s:else>
<s:a namespace="/public" action="logout" >Logout <s:property value="#session['User'].name"/></s:a>
</s:else>
Перехватчик поможет вам отслеживать, на каких страницах должен быть зарегистрирован пользователь, чтобы вы не заходилипроверяйте это в каждом действии (если не авторизованный пользователь просто вводит URL защищенной паролем страницы), но это не поможет при рендеринге.
Редактировать: Попробуйте выполнить следующее:
1) Ниже приведен предпочтительный путь struts2 для условных выражений в вашем jsp.Я проверил это на вашем bean-компоненте, поэтому он работает точно как есть =)
<s:div>
<s:if test="loggedOn">
DIV1
</s:if>
<s:else>
DIV2
</s:else>
</s:div>
2) Если ваше условное выражение работает, возможно, вы хотите, чтобы несколько jsp отвечали, если вы вошли в систему... вы не можете заставить их входить в систему для каждой страницы, только чтобы она забыла, что вы вошли в систему ... Я полагаю, вы могли , поэтому давайте рассмотрим тот факт, что вы вошли в сеанс, чтобы каждыйjsp в вашем приложении может проверить это ...
Чтобы сделать это, все, что вам нужно сделать, это добавить интерфейс "SessionAware" к вашему действию, и ваша IDE должна заставить вас добавить абстрактный метод (установщик) ивы будете использовать этот установщик для установки переменной сеанса ... Или, проще говоря, в коде:
package struts2;
import com.opensymphony.xwork2.ActionSupport;
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
public class test extends ActionSupport implements SessionAware{
private Map<String, Object> session;
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
}
Теперь, когда вы добавили интерфейс "SessionAware", чтобы вы могли установить поле сеанса в своем классе, тогдаВы можете добавить ...
public void setLoggedOn(boolean loggedOn) {
//this.loggedOn = loggedOn;
session.put("isLoggedOn", true);
}
Теперь в любом jsp ... вы можете посмотреть переменную сеанса для объектов, которые вы положили в карту ...
Так что мы должныТеперь можно изменить свой условный показ на...
<s:div>
<s:if test="#session['isLoggedOn'] == true">
DIV1
</s:if>
<s:else>
DIV2
</s:else>
</s:div>