Hi folks,

I just finished the Annotations Tutorial at Struts's cwiki [1] and ran into
a bit of a problem.  I was wondering if someone could please shed a light
on.  Here's my dev environment:

Windows 8.1 x64
Oracle/Sun JDK 1.7.0_45
Tomcat 7.0.50
Struts 2.3.16
Eclipse Kepler SR-1


The tutorial project works fine when my packages within src/main/java is
different (ie. annotations.*) from my group + artifact (ie.
local.workgroup.tutorial.struts2).  If it matches, it errors reporting
unmapped actions:

--------------------------------------------------------------------------------
snippet from pom.xml:

<groupId>local.workgroup.tutorial.struts2</groupId>
<artifactId>annotations</artifactId>
<packaging>war</packaging>
--------------------------------------------------------------------------------
Works with below package:

package annotations.actions;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.log4j.Logger;

public class HelloAction extends ActionSupport {
  //...
}
--------------------------------------------------------------------------------
Errors when package is:

package local.workgroup.tutorial.struts2.actions;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.log4j.Logger;

public class HelloAction extends ActionSupport {
  //...
}

****************************************************************

Here's a brief error:

Struts has detected an unhandled exception:
  *Messages*:
There is no Action mapped for namespace [/] and action name [hello]
associated with context path [/annotations].



Looking at the /annotations/config-browser/index.action, there are no
actions listed under default namespace.  However, under the /actions
namespace:
Actions in /actions

   - 
hello<http://localhost:8080/annotations/config-browser/showConfig.action?namespace=%2Factions&actionName=hello>
   - 
register<http://localhost:8080/annotations/config-browser/showConfig.action?namespace=%2Factions&actionName=register>
   - 
register-input<http://localhost:8080/annotations/config-browser/showConfig.action?namespace=%2Factions&actionName=register-input>



If I tried /annotations/actions/hello.action, I get this error:

Struts has detected an unhandled exception:
  *Messages*:
No result defined for action
local.workgroup.tutorial.struts2.actions.HelloAction and result success


Even though the class is:


package local.workgroup.tutorial.struts2.actions;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.log4j.Logger;

public class HelloAction extends ActionSupport {

private static final long serialVersionUID = 1L;

private static final Logger logger = Logger.getLogger(HelloAction.class
.getName());

private String message;

public String execute() throws Exception {

logger.info("In execute method of class Hello");

message = "Hello from Struts 2 with no XML configuration.";

return SUCCESS;
}

public void setMessage(String message) {
this.message = message;
}

public String getMessage() {
return message;
}
}




The convention plugin doc also uses similar package naming method [3]. Did
I name the packages wrong or did I just stumble on a bug in 2.3.16?  Is
there a small print somewhere that I may missed regarding not able to use
package naming method similar to group ID + artifact ID in pom.xml?  If I
use struts.xml for the previous tutorials and not used convention plugin,
the package naming works fine.


Thanks,
Tommy


[1] https://cwiki.apache.org/confluence/display/WW/Struts+2+Annotations
[2] http://localhost:8080/annotations/config-browser/actionNames.action
[3] http://struts.apache.org/release/2.1.x/docs/convention-plugin.html

Reply via email to