[Logo] Mentawai Forum - Mentawai Web Framework
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Template + setViewDir [Resolvido]  XML
Forum Index -> Comentários Gerais
Author Message
IceW0lf


[Avatar]

Joined: 16/03/2006 08:33:38
Messages: 1546
Location: Brasília
Offline

Estou desenvolvendo uma aplicação onde todos os meus JSPs estão dentro da pasta WEB-INF/jsp, o Sérgio brilhantemente implementou o setViewDir ApplicationManager e estão devemos fazer assim:

setViewDir("/WEB-INF/jsp/")

E se estivermos usando TEMPLATE temos que setar lá tb... até ai blzzz

Então no nosso TemplateManager temos que fazer isso:
Code:
 page = new Page("[WEB-INF/jsp/system/].*", "WEB-INF/jsp/template/template.jsp", ConventionController.class);
     	page.setBlock("header", new Page("WEB-INF/jsp/template/header.jsp"));
     	page.setBlock("menu", new Page("WEB-INF/jsp/template/menu.jsp"));
     	page.setBlock("footer", new Page("WEB-INF/jsp/template/footer.jsp"));
         add(page);


Se rodarmos uma action com uma consequencia igual abaixo por exemplo:

.on(PaisAction.LIST, fwd("system/pais/main.page"));

Seria o mesmo que:

setViewDir("/WEB-INF/jsp/") + system/pais/main.page ou seja

/WEB-INF/jsp/system/pais/main.page

Então quando tudo parece uma briza leve vem um vendaval... :o)

Digamos que no eu chame a página direto ou por um link, ai temos o problema. (http://servidor:8080/sistema/system/pais/form.page)

O ConventionController não consegue encontrar as página pois o mesmo vai procurar em /system/etc.... e o correto era procurar
/WEB-INF/jsp/system/....

Dando uma olhada na implementação do ConventionController reparei que o mesmo NÃO utiliza o setViewDir para saber onde estão as páginas, ele simplesmente faz isso:

String view = getRoot() + page.getPath() + getExtension() que seria esta saida:

/system/pais/form.jsp

O que tem q ser feito é fazer com que o ConventionController receba o setViewDir.

Leiber Wallace
Voixy ::: Soluções em Telecomunicações
IceW0lf


[Avatar]

Joined: 16/03/2006 08:33:38
Messages: 1546
Location: Brasília
Offline

Resolvi o problema implementando um if (negrito) no codigo fonte do ConventionControler segue abaixo:

public class ConventionController implements PageController {

public void processPage(Page page, HttpServletRequest request,
HttpServletResponse response, ServletContext application) {

String view = getRoot() + page.getPath() + getExtension();
if (view.indexOf( ApplicationManager.getViewDir() )<0){
view = ApplicationManager.getViewDir() + view;
}


File file = new File(application.getRealPath("/") + view);
if (!file.exists()) {
try {
request.getRequestDispatcher(view).forward(request, response);
return;
} catch (Exception e) {
throw new TemplateException(e);
}
}
page.setBlock(getPrincipalBlock(), new Page(view));
}

/**
* Pode ser estendido e redefinido. Por exemplo, se voce quiser que todas as
* paginas fiquem dentro de WEB-INF/views, eh so redefinir este metodo.
*
* @return Diretorio raiz das paginas
*/
public String getRoot() {
return "";
}

/**
* Por default, vale "body". Ou seja, ele vai considerar que este eh o bloco
* principal, o corpo, o conteudo da pagina. Pode ser redefinido.
*
* @return Nome do bloco que contera o corpo da pagina
*/
public String getPrincipalBlock() {
return "body";
}

/**
* Por default retorna .jsp. Este metodo existe para o caso de ser criado suporte
* a Freemarker ou Velocity. Assim, a extensao deveria ser diferente.
*
* @return Extensao da pagina
*/
public String getExtension() {
return ".jsp";
}

}

Aguardo uma interação de algum desenv.

Leiber Wallace
Voixy ::: Soluções em Telecomunicações
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline


Adicionei o seguinte código lá:

Code:
 		String viewDir = ApplicationManager.getViewDir();
 		
 		if (viewDir != null && viewDir.length() > 0 && !view.startsWith(viewDir)) {
 			
 			if (viewDir.endsWith("/") && view.startsWith("/")) {
 				
 				viewDir = viewDir.substring(0, viewDir.length() - 1);
 				
 			} else if (!viewDir.endsWith("/") && !view.startsWith("/")) {
 				
 				viewDir = viewDir + "/";
 			}
 			
 			view = viewDir + view;
 		} 
 
 


Pega o jar beta...

Sergio Oliveira

IceW0lf


[Avatar]

Joined: 16/03/2006 08:33:38
Messages: 1546
Location: Brasília
Offline

Yes master!!!

To baixando.

Tamos ai pra debugar o bagulho.... =D

Obrigado...

Pode falar vai... QUE CARA CHATO CREDU!


Leiber Wallace
Voixy ::: Soluções em Telecomunicações
 
Forum Index -> Comentários Gerais
Go to:   
Powered by JForum 2.1.6 © JForum Team