Struts2 funciona somente metodo execute da ActionSupport

2 respostas
marcioguj

Olá a todos!

Estou fazendo um exemplo simples com Struts2, mas não quero usar .xml para as actions, quero usar anotações, a chamada da minha pagina jsp e action=“services!changeLanguage.action” action so funciona com o metodo execute do ActionSupport outro metodo não funciona. Já tentei fazer diversas configurações no struts.xml tipo: fiz um filtro no web.xml e nada. Se alguem puder me dar uma ideia eu agradeço, os sao jars:

antlr-2.7.6.jar
commons-beanutils.jar
commons-digester-2.0.jar
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
commons-logging-1.1.jar
freemarker-2.3.13.jar
jstl.jar
jstl-api-1.2.jar
jstl-impl-1.2.jar
junit-3.8.1.jar
log4j-1.2.15.jar
ognl-2.6.11.jar
slf4j-api-1.6.1.jar
slf4j-simple-1.6.1.jar
struts2-codebehind-plugin-2.1.6.jar
struts2-config-browser-plugin-2.2.1.1.jar
struts2-core-2.1.6.jar
struts2-dojo-plugin-2.1.6.jar
struts2-tiles-plugin-2.1.6.jar
tiles-api-2.1.2.jar
tiles-core-2.1.2.jar
tiles-jsp-2.1.2.jar
tiles-portlet-2.1.2.jar
tiles-servlet-2.1.2.jar
xwork-2.1.2.jar
xwork-core-2.1.6.jar

2 Respostas

RenanBrito29

Boa noite, estou com o mesmo problema que voce, e vou aproveitar seu topico para tirar uma duvida.

Tenho a minha classe UsuarioAction que nela tem os metodos:

@Validations(requiredStrings={
@RequiredStringValidator(fieldName="usuario.usuario", message="Campo usuario obrigatorio!!!"),
@RequiredStringValidator(fieldName="usuario.senha", message="Campo senha obrigatorio!!!")}, stringLengthFields={
@StringLengthFieldValidator(fieldName="usuario.usuario", minLength="5", message="Campo usuario: Tamanho minimo de 5 caracteres!!!"),
@StringLengthFieldValidator(fieldName="usuario.usuario", maxLength="15", message="Campo usuario: Tamanho maximo de 15 caracteres!!!")})
public class UsuarioAction extends ActionSupport{
	
	private UsuarioDao dao;
	private Usuario usuario;
	
	public UsuarioAction(){
		dao = new UsuarioDao();
	}
	
	@Action(value="/adiciona", results={
	@Result(location="/lista.jsp", name="ok"),
	@Result(location="/adiciona.jsp", name="input")})
	public String adiciona(){
		dao.adiciona(usuario);
		return "ok";
	}
	
	@Action(value="/busca", results={
	@Result(location="/mostraUsuario.jsp", name="ok")})
	public String busca(){
		usuario = dao.busca(usuario.getId());
		return "ok";
	}
	
	public void setUsuario(Usuario usuario){
		this.usuario = usuario;
	}

	public Usuario getUsuario(){
		return this.usuario;
	}
}

Minha app esta validando na hora de adicionar usuarios, porem quando encontra o /busca na url apresenta o seguinte erro:

21/08/2011 21:53:29 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn WARNING: Could not find action or result No result defined for action br.com.struts.teste.action.UsuarioAction and result input at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:375) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:277) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:270) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498) at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

Se eu retirar o ActionSupport e as validações funciona perfeitamente.

Alguem sabe me dizer o que fazer?

Se existe uma força de validar usando struts 2 que seja mais viavel
Se o correto é criar uma classe para cada metodo. Ex: AdicionaUsuarioAction, CarregaUsuarioAction, AlteraUsuarioAction

abs!

marcioguj

Cara no meu caso o problema e esse…

import java.util.Locale;

import org.apache.struts2.config.Result;

import org.apache.struts2.config.Results;

import org.apache.struts2.views.tiles.TilesResult;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

@Results({

@Result(name = sucesso, value = cadUsuario, type = TilesResult.class),

@Result(name = input, value = cadUsuario, type = TilesResult.class) })

public class ServicesAction extends ActionSupport{

private static final long serialVersionUID = 1L;

private String language;  
  
private String country;  
  
private Locale locale;
//COM ESSE METODO NÃO FUNCIONA

@SuppressWarnings(unused)

private String changeLanguage() {
Locale[] locales = Locale.getAvailableLocales();  
    for(Locale locale: locales) {  
        if (locale.getLanguage().equals(language) && locale.getCountry().equals(country)) {  
            this.locale = locale;  
            Locale.setDefault(locale);  
            System.out.println(locale.getLanguage()+"_"+locale.getCountry());  
            //System.out.println(this.locale.getDisplayCountry());  
        }  
    }  
    ActionContext.getContext().setLocale(this.locale);  
    return "sucesso"; 
}  

//COM ESSE METODO FUNCIONA
/*   public String execute() {

Locale[] locales = Locale.getAvailableLocales();

for(Locale locale: locales) {

if (locale.getLanguage().equals(language) && locale.getCountry().equals(country)) {

this.locale = locale;

Locale.setDefault(locale);

System.out.println(locale.getLanguage()+"_"+locale.getCountry());

<a href="//System.out.println">//System.out.println</a>(this.locale.getDisplayCountry());

}

}

ActionContext.getContext().setLocale(this.locale);

return “sucesso”;
}  */

public String getLanguage() {  
    return language;  
}  

public void setLanguage(String language) {  
    this.language = language;  
}  

public String getCountry() {  
    return country;  
}  

public void setCountry(String country) {  
    this.country = country;  
}

public Locale getLocale() {
	return locale;
}

public void setLocale(Locale locale) {
	this.locale = locale;
}[img][/img]
Criado 19 de agosto de 2011
Ultima resposta 21 de ago. de 2011
Respostas 2
Participantes 2