Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2016, 11:53   #1
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию Аналог exit из PHP для JSF, чтобы дальнейший код в шаблоне не выполнялся.

Столкнулся с проблемой, когда после неудачной авторизации в браузер должен прийти респонз с редиректом, но из-за шаблонности дальнейший код в контенте выполняется. Ставить в каждую функцию, которая может быть вызвана после функции инициализации "if null return;" не нахожу оптимальным (хотя проверять на нулл используемое - правильно вроде бы).

Код шаблона:
Код HTML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">

    <h:head>
		<f:metadata>
<!-- Вот событие, которое должно быть вызвано на каждой странице-->
			<f:event listener="#{userBean.checkAuthorization}" type="preRenderView" />
			<ui:insert name="roleNeed" >
		    	<f:attribute name="roleNeed" value="user" />
		    </ui:insert>
		</f:metadata>
    </h:head>
    
    <h:body>		
	    <div id="header">
			<ui:insert name="header" >
				<ui:include src="/template/commonHeader.xhtml" />
			</ui:insert>
	    </div>
	    
	    <div id="content">
		  	<ui:insert name="content" >
		 		<ui:include src="/template/commonContent.xhtml" />
		   	</ui:insert>
	    </div>
		    
	    <div id="footer">
	    	<ui:insert name="footer" >
	    		<ui:include src="/template/commonFooter.xhtml" />
	    	</ui:insert>
   	    </div>

    </h:body>
</html>
Код страницы:
Код HTML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">
	
    <h:body>

	<ui:composition template="/template/main.xhtml">
		<ui:define name="roleNeed" >
			<f:attribute name="roleNeed" value="admin" />
		</ui:define>
    		<ui:define name="content">
<!-- Этот код вызываться не должен, если юзер не вошел в аккаунт, однако в логах пишется, что он вызван -->
			<h:outputLabel value="#{administrationUnit.status}" style="font-weight:bold; display: block; width:185px;" />
		</ui:define>

    	</ui:composition>

    </h:body>

</html>
В userBean.checkAuthorization вызываю этот метод:
Код:
	private void redirectToAuthorization() {
		System.err.println("userBean.redirectToAuthorization");
		try {
			FacesContext facesContext = FacesContext.getCurrentInstance();
			ExternalContext ec = facesContext.getExternalContext();
			
			HttpServletRequest req = (HttpServletRequest) ec.getRequest();
			String url = req.getRequestURL().toString();
			
			HttpServletResponse response = (HttpServletResponse) ec.getResponse();
			response.sendRedirect("http://"+ Helper.HOST_PHP +"/login.php?last_page=" + url);
		        System.err.println("userBean.redirected"); // показывается в логах эта строка, т.е. строкой выше нас "редиректит"
		}
		catch (Exception ex){
			ex.printStackTrace();
		}
	}
Может я событие userBean.checkAuthorization не туда втыкаю?
alextrof94$gmail.com

Последний раз редактировалось alextrof94; 12.05.2016 в 12:05.
alextrof94 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Код в шаблоне Trimbl Microsoft Office Excel 1 16.04.2013 04:40
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
чтобы при переходе по записям DBGrid\DBGrigEh не выполнялся Post dalien БД в Delphi 2 31.07.2009 09:57
Как сделать чтобы макрос выполнялся сам каждые 10 минут? Град SQL, базы данных 0 26.05.2008 16:12