Author: husted Date: Thu Aug 31 17:00:52 2006 New Revision: 439109 URL: http://svn.apache.org/viewvc?rev=439109&view=rev Log: WW-1392 Restore TLD and snippet code from prior revisions, since we are going to try using XDoclet with J5 instead.
Removed: struts/struts2/trunk/core/src/main/resources/META-INF/tags/ Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ActionComponent.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ActionError.java struts/struts2/trunk/core/src/main/resources/META-INF/struts-tags.tld Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ActionComponent.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ActionComponent.java?rev=439109&r1=439108&r2=439109&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ActionComponent.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ActionComponent.java Thu Aug 31 17:00:52 2006 @@ -17,6 +17,11 @@ */ package org.apache.struts2.components; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.StrutsException; +import org.apache.struts2.dispatcher.Dispatcher; +import org.apache.struts2.dispatcher.RequestMap; +import org.apache.struts2.views.jsp.TagUtils; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionProxy; import com.opensymphony.xwork2.ActionProxyFactory; @@ -24,107 +29,123 @@ import com.opensymphony.xwork2.util.OgnlValueStack; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.StrutsException; -import org.apache.struts2.config.Settings; -import org.apache.struts2.dispatcher.Dispatcher; -import org.apache.struts2.dispatcher.RequestMap; -import org.apache.struts2.views.jsp.TagUtils; import javax.servlet.ServletContext; +import javax.servlet.jsp.PageContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.PageContext; + import java.io.IOException; import java.io.Writer; import java.util.HashMap; import java.util.Map; /** - * Invoke an action directly from a view. - * See struts-tags.tld for documentation. + * <!-- START SNIPPET: javadoc --> + * <p>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, <i>unless</i> the executeResult parameter is specified.</p> + * <!-- END SNIPPET: javadoc --> + * + * <!-- START SNIPPET: params --> + * <ul> + * <li>id (String) - the id (if specified) to put the action under stack's context. + * <li>name* (String) - name of the action to be executed (without the extension suffix eg. .action)</li> + * <li>namespace (String) - default to the namespace where this action tag is invoked</li> + * <li>executeResult (Boolean) - default is false. Decides wheather the result of this action is to be executed or not</li> + * <li>ignoreContextParams (Boolean) - default to false. Decides wheather the request parameters are to be included when the action is invoked</li> + * </ul> + * <!-- END SNIPPET: params --> + * + * <pre> + * <!-- START SNIPPET: javacode --> + * public class ActionTagAction extends ActionSupport { + * + * public String execute() throws Exception { + * return "done"; + * } + * + * public String doDefault() throws Exception { + * ServletActionContext.getRequest().setAttribute("stringByAction", "This is a String put in by the action's doDefault()"); + * return "done"; + * } + * } + * <!-- END SNIPPET: javacode --> + * </pre> + * + * <pre> + * <!-- START SNIPPET: strutsxml --> + * <xwork> + * .... + * <action name="actionTagAction1" class="tmjee.testing.ActionTagAction"> + * <result name="done">success.jsp</result> + * </action> + * <action name="actionTagAction2" class="tmjee.testing.ActionTagAction" method="default"> + * <result name="done">success.jsp</result> + * </action> + * .... + * </xwork> + * <!-- END SNIPPET: strutsxml --> + * </pre> + * + * <pre> + * <!-- START SNIPPET: example --> + * <div>The following action tag will execute result and include it in this page</div> + * <br /> + * <s:action name="actionTagAction" executeResult="true" /> + * <br /> + * <div>The following action tag will do the same as above, but invokes method specialMethod in action</div> + * <br /> + * <s:action name="actionTagAction!specialMethod" executeResult="true" /> + * <br /> + * <div>The following action tag will not execute result, but put a String in request scope + * under an id "stringByAction" which will be retrieved using property tag</div> + * <s:action name="actionTagAction!default" executeResult="false" /> + * <s:property value="#attr.stringByAction" /> + * <!-- END SNIPPET: example --> + * </pre> + * + * @s.tag name="action" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ActionTag" + * description="Execute an action from within a view" */ public class ActionComponent extends Component { private static final Log LOG = LogFactory.getLog(ActionComponent.class); - /** - * Store our HttpServletResponse. - */ - protected HttpServletResponse response; + protected HttpServletResponse res; + protected HttpServletRequest req; - /** - * Store our HttpServletRequest. - */ - protected HttpServletRequest request; - - /** - * Store our ActionProxy. - */ protected ActionProxy proxy; - - /** - * Store the action mapping name. - */ protected String name; - - /** - * Store the action mappinng namespace, if different. - */ protected String namespace; - - /** - * Indicate whether to invoke the result class and render its content. - */ protected boolean executeResult; - - /** - * Indicate whether to pass the request parameters to the Action invocation. - */ protected boolean ignoreContextParams; - /** - * Construct object instance, setting runtime parameters. - * - * @param stack Our OgnlValueStack - * @param request Our HttpServletRequest - * @param response Our HttpServletResponse - */ - public ActionComponent(OgnlValueStack stack, HttpServletRequest request, HttpServletResponse response) { + public ActionComponent(OgnlValueStack stack, HttpServletRequest req, HttpServletResponse res) { super(stack); - this.request = request; - this.response = response; + this.req = req; + this.res = res; } - - // See superclass for documentation public boolean end(Writer writer, String body) { - boolean end = super.end(writer, "", false); - try { - try { - writer.flush(); - } catch (IOException e) { - LOG.warn("error while trying to flush writer ", e); - } - executeAction(); - - if ((getId() != null) && (proxy != null)) { - getStack().setValue("#attr['" + getId() + "']", - proxy.getAction()); - } - } finally { - popComponentStack(); - } + boolean end = super.end(writer, "", false); + try { + try { + writer.flush(); + } catch (IOException e) { + LOG.warn("error while trying to flush writer ", e); + } + executeAction(); + + if ((getId() != null) && (proxy != null)) { + getStack().setValue("#attr['" + getId() + "']", + proxy.getAction()); + } + } finally { + popComponentStack(); + } return end; } - /** - * Create a context in which to invoke Action class, - * passing along context parameters - * if ignoreContextParams is FALSE. - * - * @return A map representing the new context - */ private Map createExtraContext() { Map parentParams = null; @@ -145,12 +166,12 @@ Map application = ctx.getApplication(); Dispatcher du = Dispatcher.getInstance(); - Map extraContext = du.createContextMap(new RequestMap(request), + Map extraContext = du.createContextMap(new RequestMap(req), newParams, session, application, - request, - response, + req, + res, servletContext); OgnlValueStack newStack = new OgnlValueStack(stack); @@ -162,37 +183,42 @@ return extraContext; } + public ActionProxy getProxy() { + return proxy; + } + /** - * Invoke the Action class, - * If no namespace is provided, attempt to derive a namespace using the buildNamespace method. + * Execute the requested action. If no namespace is provided, we'll + * attempt to derive a namespace using buildNamespace(). The ActionProxy + * and the namespace will be saved into the instance variables proxy and + * namespace respectively. * * @see org.apache.struts2.views.jsp.TagUtils#buildNamespace */ private void executeAction() { - // FIXME: our implementation is flawed - the only concept of ! should be in DefaultActionMapper - boolean allowDynamicMethodCalls = "true".equals(Settings.get(StrutsConstants.STRUTS_ENABLE_DYNAMIC_METHOD_INVOCATION)); String actualName = findString(name, "name", "Action name is required. Example: updatePerson"); if (actualName == null) { throw new StrutsException("Unable to find value for name " + name); } - String actionName = actualName; - String methodName = null; - // handle "name!method" convention. - if (allowDynamicMethodCalls) { - int exclamation = actualName.lastIndexOf("!"); - if (exclamation != -1) { - actionName = actualName.substring(0, exclamation); - methodName = actualName.substring(exclamation + 1); - } + final String actionName; + final String methodName; + + int exclamation = actualName.lastIndexOf("!"); + if (exclamation != -1) { + actionName = actualName.substring(0, exclamation); + methodName = actualName.substring(exclamation + 1); + } else { + actionName = actualName; + methodName = null; } String namespace; if (this.namespace == null) { - namespace = TagUtils.buildNamespace(getStack(), request); + namespace = TagUtils.buildNamespace(getStack(), req); } else { namespace = findString(this.namespace); } @@ -202,21 +228,20 @@ // execute at this point, after params have been set try { Configuration config = Dispatcher.getInstance().getConfigurationManager().getConfiguration(); - proxy = ActionProxyFactory.getFactory().createActionProxy(config, namespace, actionName, - createExtraContext(), executeResult, true); + proxy = ActionProxyFactory.getFactory().createActionProxy(config, namespace, actionName, createExtraContext(), executeResult, true); if (null != methodName) { proxy.setMethod(methodName); } // set the new stack into the request for the taglib to use - request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, proxy.getInvocation().getStack()); + req.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, proxy.getInvocation().getStack()); proxy.execute(); } catch (Exception e) { - String message = "Could not invoke action: " + namespace + "/" + actualName; + String message = "Could not execute action: " + namespace + "/" + actualName; LOG.error(message, e); } finally { // set the old stack back on the request - request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack); + req.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack); } if ((getId() != null) && (proxy != null)) { @@ -226,35 +251,41 @@ } /** - * Expose proxy instance (for testing). - * - * @return proxy instance + * the id (if speficied) to put the action under stack's context. + * @s.tagattribute required="false" type="String" */ - public ActionProxy getProxy() { - return proxy; - } - - // See TLD for documentation public void setId(String id) { super.setId(id); } - // See TLD for documentation + /** + * name of the action to be executed (without the extension suffix eg. .action) + * @s.tagattribute required="true" type="String" + */ public void setName(String name) { this.name = name; } - // See TLD for documentation + /** + * namespace for action to call + * @s.tagattribute required="false" type="String" default="namespace from where tag is used" + */ public void setNamespace(String namespace) { this.namespace = namespace; } - // See TLD for documentation + /** + * whether the result of this action (probably a view) should be executed/rendered + * @s.tagattribute required="false" type="Boolean" default="false" + */ public void setExecuteResult(boolean executeResult) { this.executeResult = executeResult; } - // See TLD for documentation + /** + * whether the request parameters are to be included when the action is invoked + * @s.tagattribute required="false" type="Boolean" default="false" + */ public void setIgnoreContextParams(boolean ignoreContextParams) { this.ignoreContextParams = ignoreContextParams; } Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ActionError.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ActionError.java?rev=439109&r1=439108&r2=439109&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ActionError.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ActionError.java Thu Aug 31 17:00:52 2006 @@ -23,32 +23,38 @@ import javax.servlet.http.HttpServletResponse; /** - * Render action errors, if they exist, - * obtaining the layout from theme. + * <!-- START SNIPPET: javadoc --> + * + * Render action errors if they exists the specific layout of the rendering depends on + * the theme itself. + * + * <!-- END SNIPPET: javadoc --> + * + * <p/> <b>Examples</b> + * + * <pre> + * <!-- START SNIPPET: example --> + * + * <s:actionerror /> + * <s:form .... >> + * .... + * </s:form> + * + * <!-- END SNIPPET: example --> + * </pre> + * + * @s.tag name="actionerror" tld-body-content="empty" tld-tag-class="org.apache.struts2.views.jsp.ui.ActionErrorTag" + * description="Render action errors if they exists" */ public class ActionError extends UIBean { - /** - * Provide the tag template name. - */ - private static final String TEMPLATE = "actionerror"; + public static final String TEMPLATE = "actionerror"; + - /** - * Construct object instance, setting runtime parameters. - * - * @param stack Our OgnlValueStack - * @param request Our HttpServletRequest - * @param response Our HttpServletResponse - */ public ActionError(OgnlValueStack stack, HttpServletRequest request, HttpServletResponse response) { super(stack, request, response); } - /** - * Provide the tag's default template. - * - * @return the tag's default template - */ protected String getDefaultTemplate() { return TEMPLATE; } Modified: struts/struts2/trunk/core/src/main/resources/META-INF/struts-tags.tld URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/META-INF/struts-tags.tld?rev=439109&r1=439108&r2=439109&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/resources/META-INF/struts-tags.tld (original) +++ struts/struts2/trunk/core/src/main/resources/META-INF/struts-tags.tld Thu Aug 31 17:00:52 2006 @@ -13,8 +13,7 @@ <description><![CDATA[ To make it easier to access dynamic data, the Apache Struts framework includes a library of custom tags. - The tags interact with the framework's expression language, - and its validation and internationalization features, + The tags interact with the framework's validation and internationalization features, to ensure that input is correct and output is localized. The Struts Tags can be used with JSP, FreeMarker, or Velocity. ]]></description> @@ -3005,87 +3004,51 @@ <name>action</name> <tag-class>org.apache.struts2.views.jsp.ActionTag</tag-class> <body-content>JSP</body-content> - <description> - Invoke an action directly from a view. - Tag attributes specify an action name and an optional namespace. - Tag body content renders the result from the Action. - If the executeResult attribute is TRUE, - any result class specified by the action mapping is invoked and rendered, - otherwise the result is ignored. - </description> + <description><![CDATA[Execute an action from within a view]]></description> + <attribute> <name>id</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>If specified, the action's stack context ID</description> + + <description><![CDATA[the id (if speficied) to put the action under stack's context.]]></description> + </attribute> <attribute> <name>name</name> <required>true</required> <rtexprvalue>true</rtexprvalue> - <description>Action mapping to invoke</description> + + <description> + <![CDATA[name of the action to be executed (without the extension suffix eg. .action)]]></description> + </attribute> <attribute> <name>namespace</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>The action mapping's namespace (if different than the current namespace)</description> + + <description><![CDATA[namespace for action to call]]></description> + </attribute> <attribute> <name>executeResult</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>If TRUE, invoke the result class, rendering its content (if any)</description> + + <description> + <![CDATA[whether the result of this action (probably a view) should be executed/rendered]]></description> + </attribute> <attribute> <name>ignoreContextParams</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>If FALSE, include the request parameters during the action invocation</description> + + <description> + <![CDATA[whether the request parameters are to be included when the action is invoked]]></description> + </attribute> - <example><![CDATA[ -// Action class -public class ActionTagAction extends ActionSupport { - - public String execute() throws Exception { - return SUCCESS; - } - - public String alternate() throws Exception { - ServletActionContext.getRequest().setAttribute("actionAttribute", - "This string is a request attribute set by the ActionTagAction's alternate() method."); - return SUCCESS; - } - } - - <!-- Struts configuation --> - <struts> - .... - <action name="ActionTagAction1" class="testing.ActionTagAction"> - <result>success.jsp</result> - </action> - <action name="ActionTagAction2" class="testing.ActionTagAction" method="alternate"> - <result name="done">success.jsp</result> - </action> - .... - </struts> - - <!-- Struts tags (in a server page) --> - <div> - <p> - Content rendered by another Action, invoked as this page is being rendered: - </p> - <s:action name="ActionTagAction1" executeResult="true" /> - </div><div> - <p> - Content placed into the context by another Action, invoked as this page is being rendered: - </p> - <s:action name="ActionTagAction2" executeResult="false" /> - <s:property value="#attr.actionAttribute" /> - <p> - (Note that the Action itself did not render a result.) - </p> - ]]></example> </tag> <tag> @@ -3523,219 +3486,275 @@ <name>actionerror</name> <tag-class>org.apache.struts2.views.jsp.ui.ActionErrorTag</tag-class> <body-content>empty</body-content> - <description> - Render action errors, if they exist, obtaining the layout from theme. - </description> + <description><![CDATA[Render action errors if they exists]]></description> + <attribute> <name>theme</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>Theme (other than default) to use for rendering the element</description> + + <description><![CDATA[The theme (other than default) to use for rendering the element]]></description> + </attribute> <attribute> <name>templateDir</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>Template directory (other than default) to use to find the themes (and hence the template)</description> + + <description> + <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description> + </attribute> <attribute> <name>template</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>Template (other than default) to use for rendering the element</description> + + <description><![CDATA[The template (other than default) to use for rendering the element]]></description> + </attribute> <attribute> <name>cssClass</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>Cascading Style Sheet class (other than default)for element to use</description> + + <description><![CDATA[The css class to use for element]]></description> + </attribute> <attribute> <name>cssStyle</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>Cascading Style Sheet definitions for element to use</description> + + <description><![CDATA[The css style definitions for element ro use]]></description> + </attribute> <attribute> <name>title</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>HTML title attribute for element to use</description> + + <description><![CDATA[Set the html title attribute on rendered html element]]></description> + </attribute> <attribute> <name>disabled</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>HTML disabled attribute for element to use</description> + + <description><![CDATA[Set the html disabled attribute on rendered html element]]></description> + </attribute> <attribute> <name>label</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>Label expression used for rendering a element specific label</description> + + <description><![CDATA[Label expression used for rendering a element specific label]]></description> + </attribute> <attribute> <name>labelPosition</name> <required>false</required> <rtexprvalue>true</rtexprvalue> + <description><![CDATA[deprecated.]]></description> + </attribute> <attribute> <name>labelposition</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>Label position for form element (top/left)</description> + + <description><![CDATA[define label position of form element (top/left)]]></description> + </attribute> <attribute> <name>requiredposition</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>Required position for form element (left|right)</description> + + <description><![CDATA[define required position of required form element (left|right)]]></description> + </attribute> <attribute> <name>name</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>Name for element</description> + + <description><![CDATA[The name to set for element]]></description> + </attribute> <attribute> <name>required</name> <required>false</required> <rtexprvalue>true</rtexprvalue> + <description> - If TRUE, rendered element will indicate that input is required. - </description> + <![CDATA[If set to true, the rendered element will indicate that input is required]]></description> + </attribute> <attribute> <name>tabindex</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>HTML tabindex attribute for rendered HTML element</description> + + <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description> + </attribute> <attribute> <name>value</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>Preset value of input element</description> + + <description><![CDATA[Preset the value of input element.]]></description> + </attribute> <attribute> <name>onclick</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>HTML attribute for rendered element</description> + + <description><![CDATA[Set the html onclick attribute on rendered html element]]></description> + </attribute> <attribute> <name>ondblclick</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>HTML attribute for rendered element</description> + + <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description> + </attribute> <attribute> <name>onmousedown</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>HTML attribute for rendered element</description> + + <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description> + </attribute> <attribute> <name>onmouseup</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>HTML attribute for rendered element</description> + + <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description> + </attribute> <attribute> <name>onmouseover</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>HTML attribute for rendered element</description> + + <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description> + </attribute> <attribute> <name>onmousemove</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>HTML attribute for rendered element</description> + + <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description> + </attribute> <attribute> <name>onmouseout</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>HTML attribute for rendered element</description> + + <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description> + </attribute> <attribute> <name>onfocus</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>HTML attribute for rendered element</description> + + <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description> + </attribute> <attribute> <name>onblur</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>HTML attribute for rendered element</description> + + <description><![CDATA[Set the html onblur attribute on rendered html element]]></description> + </attribute> <attribute> <name>onkeypress</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>HTML attribute for rendered element</description> + + <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description> + </attribute> <attribute> <name>onkeydown</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>HTML attribute for rendered element</description> + + <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description> + </attribute> <attribute> <name>onkeyup</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>HTML attribute for rendered element</description> + + <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description> + </attribute> <attribute> <name>onselect</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>HTML attribute for rendered element</description> + + <description><![CDATA[Set the html onselect attribute on rendered html element]]></description> + </attribute> <attribute> <name>onchange</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>HTML attribute for rendered element</description> + + <description><![CDATA[Set the html onchange attribute on rendered html element]]></description> + </attribute> <attribute> <name>accesskey</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>HTML attribute for rendered element</description> + + <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description> + </attribute> <attribute> <name>tooltip</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>Tooltip attribute for rendered element</description> + + <description><![CDATA[Set the tooltip of this particular component]]></description> + </attribute> <attribute> <name>tooltipConfig</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description>TooltipConfig attribute for rendered element</description> + + <description><![CDATA[Set the tooltip configuration]]></description> + </attribute> <attribute> <name>id</name> <required>false</required> <rtexprvalue>true</rtexprvalue> + <description> - Unique id for referencing element. - For UI and form tags it will be used as HTML id attribute - </description> + <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description> + </attribute> - <example><![CDATA[ -// Note that the tag provides its own formatting -<s:actionerror /> -<s:form ... > -... -</s:form> - ]]></example> </tag> <tag> @@ -3743,7 +3762,7 @@ <name>if</name> <tag-class>org.apache.struts2.views.jsp.IfTag</tag-class> <body-content>JSP</body-content> - <description>If tag</description> + <description><![CDATA[If tag]]></description> <attribute> <name>test</name>