[
https://issues.apache.org/struts/browse/WW-2724?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Musachy Barroso resolved WW-2724.
---------------------------------
Resolution: Won't Fix
Documentation updated to reflect this limitation
> [S2-ActionComponent] Action not on the stack while evaluating body
> ------------------------------------------------------------------
>
> Key: WW-2724
> URL: https://issues.apache.org/struts/browse/WW-2724
> Project: Struts 2
> Issue Type: Bug
> Components: Other
> Affects Versions: 2.1.1
> Environment: weblogic10.0, windows XP
> Reporter: kris beaumont
>
> as advised in the mailing list, I create a BUG request for this...
> http://www.nabble.com/-S2-ActionComponent--Action-not-on-the-stack-while-evaluating-body-td18502819.html
> I think I found a problem in struts 2.1.1 (or misunderstood the
> documentation).
> I have an action that can search for persons (querystring for name, list of
> persons retreived).
> I wanted to reuse that functionality for a form where a user has to be picked
> (to be added to a group of users).
> So I did this:
> [code]
> <div>
> <span>choose a person: </span>
> <s:action name="viewUsers" namespace="/security/users"
> executeResult="false" var="usersAction">
> <div class="searchForm">
> <s:text name="search.query"/>
> <s:form action="addUser" id="searchForm"
> namespace="/ref/groups">
> <s:textfield name="queryString"
> value="%{#attr[usersAction].queryString}" label="search.query"
> labelposition="left" labelSeparator=":"/>
> <s:submit value="OK"/>
> </s:form>
> </div>
> <s:hidden name="groupId" />
> .... More code with display tag table and some buttons etc....
> </s:action>
> </div>
> [/code]
> %{#attr[usersAction].queryString} and other variations never got evaluated,
> and when I debug the textcomponent I can't find the usersAction on the
> valuestack...
> I think it's because of a bug in ActionComponent that only executes the
> action in the 'end' method so it's not yet on the stack when the body is
> evaluated.
> More specific details:
> This is componentTagSupport:
> [code]
> public int doStartTag() throws JspException {
> component = getBean(getStack(), (HttpServletRequest)
> pageContext.getRequest(), (HttpServletResponse) pageContext.getResponse());
> Container container = Dispatcher.getInstance().getContainer();
> container.inject(component);
>
> populateParams();
> boolean evalBody = component.start(pageContext.getOut());
> if (evalBody) {
> return component.usesBody() ? EVAL_BODY_BUFFERED :
> EVAL_BODY_INCLUDE;
> } else {
> return SKIP_BODY;
> }
> }
> [/code]
> That returns EVAL_BODY_INCLUDE, so it'll evaluate the body, but the action is
> not yet on the stack
> While the ActionComponent does
> [code]
> public boolean end(Writer writer, String body) {
> boolean end = super.end(writer, "", false);
> try {
> if (flush) {
> try {
> writer.flush();
> } catch (IOException e) {
> LOG.warn("error while trying to flush writer ", e);
> }
> }
> executeAction();
> if ((getVar() != null) && (proxy != null)) {
> getStack().setValue("#attr['" + getVar() + "']",
> proxy.getAction());
> }
> } finally {
> popComponentStack();
> }
> return end;
> }
> [/code]
> So the action is executed and then again removed from the stack
> (popComponentStack) before it can be used in the body ...
> While this is in the docs (http://struts.apache.org/2.0.11.2/docs/action.html
> ):
> [quote]
> This tag enables developers to call actions directly from a JSP page by
> specifying the action name and an optional namespace. The body content of the
> tag is used to render the results from the Action. Any result processor
> defined for this action in struts.xml will be ignored, unless the
> executeResult parameter is specified.
> Parameters can be passed to the action using nested param
> <http://struts.apache.org/2.0.11.2/docs/param.html> tags.
> [/quote]
> So I think the pop thing should happen in the end, but the executeAction
> should happen in the '"start" method.
> Unless I'm making a huge thinking-error (meaning I need a vacation, which my
> boss will certainly contend :))
> Thanks already for reading!
> Kris
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.