You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by "Illes, Szabolcs" <S....@nature.com> on 2009/12/02 10:59:02 UTC

Parameters after the action name, annotation based config not working

Hi All,

 

I'd like to report a possible bug in struts2 annotation based action
mapping:

 

I wanted to have slashes in my action names and use them as parameters
(REST style service)

 

For example:

 

The action name is /opds/0028-0838/2009 and is mapped to EPubOPDSAction 

 

The problem is that it only works when I use the struts2.xml to setup
map the action:

 

struts.xml:

 

<struts>

  <constant name="struts.enable.SlashesInActionNames" value="true"/>

  <constant name="struts.mapper.alwaysSelectFullNamespace"
value="false"/>

  <constant name="struts.objectFactory" value="guice"/>

 

  <package name="rest" extends="struts-default" namespace="/epub/rest">

 

    <action name="opds/*/*"
class="com.nature.mobile.epub.actions.EPubOPDSAction">

      <param name="issn">{1}</param>

      <param name="year">{2}</param>

     <result>/WEB-INF/content/epub/rest/opds.jsp</result>

     </action>

    </package>

</struts>

 

Action class: ( nothing special)

public class EPubOPDSAction extends ActionSupport implements
ServletRequestAware {

    public String execute() throws Exception { ... }

 

   public void setYear(String year) { }  // gets called with year

 

    public void setIssn(String issn) {  } // gets called with issn

}

 

but not when using java annotations:

 

struts.xml:

<struts>

  <constant name="struts.enable.SlashesInActionNames" value="true"/>

  <constant name="struts.mapper.alwaysSelectFullNamespace"
value="false"/>

  <constant name="struts.objectFactory" value="guice"/>

</struts>

 

@Namespace("/epub/rest")

@Result(name="success", location="/WEB-INF/content/epub/rest/opds.jsp")

public class EPubOPDSAction extends ActionSupport implements
ServletRequestAware {

 

@Override

@Action(value="opds/*/*",

            params={"issn","{1}", "year", "{2}"})

    public String execute() throws Exception { ... }

 

   public void setYear(String year) { } 

 

    public void setIssn(String issn) {  }

 

}

 

 

This one just throws an exception that there is no action mapped for
/opds/0028-0838/2009 

 

I'm using:

struts2-core 2.1.8.1

and 

struts2-convention-plugin

2.1.8.1

 

Any idea?

 

Thanks,

Szabolcs


********************************************************************************   
DISCLAIMER: This e-mail is confidential and should not be used by anyone who is
not the original intended recipient. If you have received this e-mail in error
please inform the sender and delete it from your mailbox or any other storage
mechanism. Neither Macmillan Publishers Limited nor any of its agents accept
liability for any statements made which are clearly the sender's own and not
expressly made on behalf of Macmillan Publishers Limited or one of its agents.
Please note that neither Macmillan Publishers Limited nor any of its agents
accept any responsibility for viruses that may be contained in this e-mail or
its attachments and it is your responsibility to scan the e-mail and 
attachments (if any). No contracts may be concluded on behalf of Macmillan 
Publishers Limited or its agents by means of e-mail communication. Macmillan 
Publishers Limited Registered in England and Wales with registered number 785998 
Registered Office Brunel Road, Houndmills, Basingstoke RG21 6XS   
********************************************************************************