A created a new issue about this bug: http://issues.apache.org/struts/browse/STR-2873
2006/5/11, Craig McClanahan <[EMAIL PROTECTED]>:
On 5/9/06, A. Alonso Dominguez <[EMAIL PROTECTED]> wrote: > > Hi there! > > I'm trying to use the new struts-action framework, version 1.3.3 with > tiles > and faces. I'm following the example applications but I found possibly a > bug > when rendering a struts-based FormBean. > > The jsp code that I was using is as follows: > > <s:errors /> > <s:form action="/login" id="login" styleClass="loginForm" > focus="username"> > <h:panelGrid columns="2"> > <f:facet name="header"> > <h:panelGroup> > <h:graphicImage > url="/common/skin/social-labs/img/circle1.png" > /> > <s:message key="page.logon.form"> > <f:param name="arg0" value="Social Labs" /> > </s:message> > </h:panelGroup> > </f:facet> > <h:outputLabel for="username"> > <s:message key="form.logon.username" /> > </h:outputLabel> > <h:inputText id="username" size="25" value="#{logonForm.username }" > /> > > <h:outputLabel for="password"> > <s:message filter="false" key="form.logon.password" /> > </h:outputLabel> > <h:inputSecret id="password" size="25" value="#{ logonForm.password}" > /> > > <f:facet name="footer"> > <h:commandButton id="submit" type="SUBMIT" styleClass="img" > image="/common/skin/social-labs/img/login.png" /> > </f:facet> > </h:panelGrid> > </s:form> > > but when it's rendered to the view, the HTML form's "action" attribute > references "/common/skin/default/layout/base.do". There is not any action > in > my application with that url. Instead there is a file > "/common/skin/default/layout/base.jsp" which is the base file for the > tiles > definitions: > > <definition name="base.layout" > page="/common/skin/default/layout/base.jsp"> > <put name="title" value="" /> > <put name="navigation" value="" /> > <put name="body" value="" /> > <putList name="scripts"> > <add value="" /> > </putList> > </definition> > > I dived inside "the org.apache.struts.faces.renderer.FormRenderer" code > and > I found this code (line 280): > > protected String action(FacesContext context, UIComponent component) { > String actionURL = > context.getApplication().getViewHandler(). > getActionURL(context, context.getViewRoot().getViewId()); > if (log.isTraceEnabled()) { > log.trace("getActionURL(" + context.getViewRoot ().getViewId() > + > ") --> " + actionURL); > } > return (context.getExternalContext ().encodeActionURL(actionURL)); > > } > > > which really does nothing with the actionURL, It just takes de ViewRootId > and returns it to the caller. > Playing with this code I have now the following: > > protected String action(FacesContext context, UIComponent component, > ModuleConfig moduleConfig) { > //String actionURL = > // context.getApplication ().getViewHandler(). > // getActionURL(context, context.getViewRoot().getViewId()); > FormComponent form = (FormComponent) component; > String actionURL = context.getApplication().getViewHandler(). > getActionURL(context, moduleConfig.getPrefix() + > form.getAction()); > if (log.isTraceEnabled()) { > log.trace("getActionURL(" + context.getViewRoot ().getViewId() > + > ") --> " + actionURL); > } > return (context.getExternalContext ().encodeActionURL(actionURL)); > > } > > I don't know if this is the correct way for retrieving the real actionURL > but It works now and I'm using it. > > Should this be posted as a bug?? > > Yes, this does sound like a bug. Could you please file an issue on it, using project name "Struts Action 1" and component "Faces"? http://issues.apache.org/struts/ Craig