Ola .
Esse não é um erro. É uma falha de segurança que foi corrigida nas versoes 2.0.11 e 2.1 que agora nao permite mais o uso de ${} nas tags do struts. Vou procurar o link com maiores informações e depois te passo.
Uma pergunta : no seu exemplo, o index.jsp não deveria chamar um action ao inves do jsp direto ?
Eu estranhei jsp chamando jsp pois rompe com o modelo MVC.
O que vc deve fazer é criar uma action para chamar principal.jsp ou nem precisa usar a tag do struts2, use a tag do html mesmo(input) 8) ;
Não vejo problemas em um JSP chamar outro JSP.
O MVC não obriga de forma nenhuma a passar por uma action antes de direcionar para uma outra página.
Afinla de contas, pra que servem os links.
Talvez uma alternativa fosse mapear o jsp direto no struts.xml, mas dependendo do caso é muito esforço pra pouca vantagem.
Vou pesquisar um pouco melhor sobre como resolver o uso de JSP EL nas tags do struts após a versão 2.0.11.
Não tenho certeza de que isso está realmente desabilitado, já que na thread citada acima o que foi desabilitado foi a chamada a metodos static.
Respondo aqui mesmo assimque coneguir uma posição melhor.
Seguinte, não ficou muito claro se realmente foi desabilitada a JSP EL do struts 2.
Mas de qualquer forma o que os caras recomendam é usar somente OGNL, até mesmo por causa daquela questão de segurança. Sei que a chamada a métodos static através de OGNL foi desabilitada e isso garante que chamadas a System.exit(0) e afins não serão possíveis.
No entando há a possibilidade de habilitar isso através do struts.properties
Abaixo segue uma (tentativa de) tabela com o uso de OGNL no lugar da EL.
Struts 2 Named Objects
Struts 2 places request parameters and request, session, and application attributes on the OGNL stack. They may be accessed as shown below.
name | value
#parameters['foo'] or #parameters.foo | request parameter ['foo'] (request.getParameter())
#request['foo'] or #request.foo | request attribute ['foo'] (request.getAttribute())
#session['foo'] or #session.foo | session attribute 'foo'
#application['foo'] or #application.foo | ServletContext attributes 'foo'
#attr['foo'] or #attr.foo | Access to PageContext if available, otherwise
searches request/session/application respectively
mais ou menos é isso aí ó…
Se der erro de evaluation por causa do # então tem que desabilitar a EL. Mas acho que você deverá tomar muito cuidado com isso, pois disso depende a compatibilidade da sua app.
Na verdade Herrera funciona das duas formar tanto passando pela jsp como pela action . E como eu faço para realizar este exemplo que estou mostrando aí na jsp na versao que foi corrigida o bug ?