finneycanhelp
finneycanhelp

Reputation: 9248

Pass attribute into struts2 action via struts.xml

How can I pass an attribute into my struts2 java action that tells me whether the action was called from one URL path / action mapping vs another?

I figured I could put something in the struts.xml for two action mappings but use the same java action and just pass in a flag into the action.

Upvotes: 3

Views: 13614

Answers (2)

Steven Benitez
Steven Benitez

Reputation: 11055

You'll want to use the <param/> tag. I do this frequently for actions that handle both adding and editing an entity, as the fields, validations, and whatnot are virtually identical. Here's an example of that.

struts.xml

<action name="users/add" class="AddEditUserAction">
  <param name="edit">false</param>
  <result name="input">/WEB-INF/jsp/addEditUser.jsp</result>
</action>

<action name="users/{username}/edit" class="AddEditUserAction">
  <param name="edit">true</param>
  <result name="input">/WEB-INF/jsp/addEditUser.jsp</result>
</action>

The Action

public class AddEditUserAction {
  private boolean isEdit;

  // this is called by the struts.xml to set the value
  public void setEdit(final boolean edit) {
    isEdit = edit;
  }
}

In order for this to work, you need the static parameters interceptor in your stack (it's included by default).

Upvotes: 5

Dave Newton
Dave Newton

Reputation: 160271

I question the design.

I'd handle it by specifying a method in the action configuration for one or both mappings.

The method(s) would set a flag in the action and call the "guts" of the action, which would query the flag value, and proceed accordingly.

Upvotes: 0

Related Questions