Author: tmjee Date: Sat Aug 12 23:45:27 2006 New Revision: 431149 URL: http://svn.apache.org/viewvc?rev=431149&view=rev Log: WW-769 - UITags do not evaluate id attribute
Added: struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/FormButtonTest.java (with props) struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java (with props) Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Form.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/FormButton.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Submit.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Form.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Form.java?rev=431149&r1=431148&r2=431149&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Form.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Form.java Sat Aug 12 23:45:27 2006 @@ -131,14 +131,14 @@ protected void evaluateExtraParams() { super.evaluateExtraParams(); - boolean isAjax = "ajax".equalsIgnoreCase(this.theme); + //boolean isAjax = "ajax".equalsIgnoreCase(this.theme); if (validate != null) { addParameter("validate", findValue(validate, Boolean.class)); } // calculate the action and namespace - String action = null; + /*String action = null; if (this.action != null) { // if it isn't specified, we'll make somethig up action = findString(this.action); @@ -150,7 +150,7 @@ String namespace = determineNamespace(this.namespace, getStack(), request); evaluateExtraParamsServletRequest(action, namespace, isAjax); - } + }*/ if (onsubmit != null) { addParameter("onsubmit", findString(onsubmit)); @@ -177,6 +177,27 @@ if (!parameters.containsKey("tagNames")) { // we have this if check so we don't do this twice (on open and close of the template) addParameter("tagNames", new ArrayList()); + } + } + + protected void populateComponentHtmlId(Form form) { + boolean isAjax = "ajax".equalsIgnoreCase(this.theme); + + String action = null; + if (this.action != null) { + // if it isn't specified, we'll make somethig up + action = findString(this.action); + } + + if (id != null) { + addParameter("id", escape(id)); + } + if (Dispatcher.getInstance().isPortletSupportActive() && PortletActionContext.isPortletRequest()) { + evaluateExtraParamsPortletRequest(namespace, action); + } else { + String namespace = determineNamespace(this.namespace, getStack(), + request); + evaluateExtraParamsServletRequest(action, namespace, isAjax); } } Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/FormButton.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/FormButton.java?rev=431149&r1=431148&r2=431149&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/FormButton.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/FormButton.java Sat Aug 12 23:45:27 2006 @@ -40,7 +40,9 @@ super(stack, request, response); } - public void evaluateParams() { + //public void evaluateParams() { + public void evaluateExtraParams() { + super.evaluateExtraParams(); if (align == null) { align = "right"; } @@ -51,7 +53,7 @@ submitType = type; } - super.evaluateParams(); + //super.evaluateParams(); addParameter("type", submitType); @@ -78,12 +80,55 @@ addParameter("align", findString(align)); } - + /** - * Indicate whether the concrete button supports the type "image". - * - * @return <tt>true</tt> if type image is supported. + * Override UIBean's implementation, such that component Html id is determined + * in the following order :- + * <ol> + * <li>This component id attribute</li> + * <li>[containing_form_id]_[this_component_name]</li> + * <li>[containing_form_id]_[this_component_action]_[this_component_method]</li> + * <li>[containing_form_id]_[this_component_method]</li> + * <li>[this_component_name]</li> + * <li>[this_component_action]_[this_component_method]</li> + * <li>[this_component_method]</li> + * </ol> */ + protected void populateComponentHtmlId(Form form) { + String _tmp_id = ""; + if (id != null) { + // this check is needed for backwards compatibility with 2.1.x + if (altSyntax()) { + _tmp_id = findString(id); + } else { + _tmp_id = id; + } + } + else { + if (form != null && form.getParameters().get("id") != null) { + _tmp_id = _tmp_id + form.getParameters().get("id").toString() + "_"; + } + if (name != null) { + _tmp_id = _tmp_id + escape(name); + } else if (action != null || method != null){ + if (action != null) { + _tmp_id = _tmp_id + escape(action); + } + if (method != null) { + _tmp_id = _tmp_id + "_" + escape(method); + } + } else { + _tmp_id = _tmp_id + hashCode(); + } + } + addParameter("id", _tmp_id); + } + + /** + * Indicate whether the concrete button supports the type "image". + * + * @return <tt>true</tt> if type image is supported. + */ protected abstract boolean supportsImageType(); /** Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Submit.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Submit.java?rev=431149&r1=431148&r2=431149&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Submit.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Submit.java Sat Aug 12 23:45:27 2006 @@ -179,12 +179,20 @@ } public void evaluateParams() { - - if (value == null) { + if (value == null) { value = "Submit"; } + super.evaluateParams(); + } + + public void evaluateExtraParams() { + super.evaluateExtraParams(); + + /* if (value == null) { + value = "Submit"; + }*/ - super.evaluateParams(); + //super.evaluateParams(); if (null != src) { addParameter("src", findString(src)); Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java?rev=431149&r1=431148&r2=431149&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java Sat Aug 12 23:45:27 2006 @@ -689,18 +689,8 @@ final Form form = (Form) findAncestor(Form.class); - if (id != null) { - // this check is needed for backwards compatibility with 2.1.x - if (altSyntax()) { - addParameter("id", findString(id)); - } else { - addParameter("id", id); - } - } else if (form != null) { - addParameter("id", form.getParameters().get("id") + "_" + escape(name)); - } else { - addParameter("id", escape(name)); - } + // create HTML id element + populateComponentHtmlId(form); if (form != null ) { addParameter("form", form.getParameters()); @@ -815,6 +805,34 @@ return tooltipConfig; } + /** + * Create HTML id element for the component and populate this component parmaeter + * map. + * + * The order is as follows :- + * <ol> + * <li>This component id attribute</li> + * <li>[containing_form_id]_[this_component_name]</li> + * <li>[this_component_name]</li> + * </ol> + * + * @param form + */ + protected void populateComponentHtmlId(Form form) { + if (id != null) { + // this check is needed for backwards compatibility with 2.1.x + if (altSyntax()) { + addParameter("id", findString(id)); + } else { + addParameter("id", id); + } + } else if (form != null) { + addParameter("id", form.getParameters().get("id") + "_" + escape(name)); + } else { + addParameter("id", escape(name)); + } + } + /** * The template directory. Added: struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/FormButtonTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/FormButtonTest.java?rev=431149&view=auto ============================================================================== --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/FormButtonTest.java (added) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/FormButtonTest.java Sat Aug 12 23:45:27 2006 @@ -0,0 +1,122 @@ +/* + * $Id: FormButton.java 420385 2006-07-10 00:57:05Z tmjee $ + * + * Copyright 2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.struts2.components; + +import org.apache.struts2.StrutsTestCase; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; + +import com.opensymphony.xwork2.util.OgnlValueStack; + +import junit.framework.TestCase; + +/** + * + * @version $Date$ $Id$ + */ +public class FormButtonTest extends StrutsTestCase { + + public void testPopulateComponentHtmlId1() throws Exception { + MockHttpServletRequest req = new MockHttpServletRequest(); + MockHttpServletResponse res = new MockHttpServletResponse(); + OgnlValueStack stack = new OgnlValueStack(); + + Form form = new Form(stack, req, res); + form.getParameters().put("id", "formId"); + + Submit submit = new Submit(stack, req, res); + submit.setId("submitId"); + + submit.populateComponentHtmlId(form); + + assertEquals("submitId", submit.getParameters().get("id")); + } + + public void testPopulateComponentHtmlId2() throws Exception { + MockHttpServletRequest req = new MockHttpServletRequest(); + MockHttpServletResponse res = new MockHttpServletResponse(); + OgnlValueStack stack = new OgnlValueStack(); + + Form form = new Form(stack, req, res); + form.getParameters().put("id", "formId"); + + Submit submit = new Submit(stack, req, res); + submit.setName("submitName"); + + submit.populateComponentHtmlId(form); + + assertEquals("formId_submitName", submit.getParameters().get("id")); + } + + public void testPopulateComponentHtmlId3() throws Exception { + MockHttpServletRequest req = new MockHttpServletRequest(); + MockHttpServletResponse res = new MockHttpServletResponse(); + OgnlValueStack stack = new OgnlValueStack(); + + Form form = new Form(stack, req, res); + form.getParameters().put("id", "formId"); + + Submit submit = new Submit(stack, req, res); + submit.setAction("submitAction"); + submit.setMethod("submitMethod"); + + submit.populateComponentHtmlId(form); + + assertEquals("formId_submitAction_submitMethod", submit.getParameters().get("id")); + } + + public void testPopulateComponentHtmlId4() throws Exception { + MockHttpServletRequest req = new MockHttpServletRequest(); + MockHttpServletResponse res = new MockHttpServletResponse(); + OgnlValueStack stack = new OgnlValueStack(); + + Submit submit = new Submit(stack, req, res); + submit.setId("submitId"); + + submit.populateComponentHtmlId(null); + + assertEquals("submitId", submit.getParameters().get("id")); + } + + public void testPopulateComponentHtmlId5() throws Exception { + MockHttpServletRequest req = new MockHttpServletRequest(); + MockHttpServletResponse res = new MockHttpServletResponse(); + OgnlValueStack stack = new OgnlValueStack(); + + Submit submit = new Submit(stack, req, res); + submit.setName("submitName"); + + submit.populateComponentHtmlId(null); + + assertEquals("submitName", submit.getParameters().get("id")); + } + + public void testPopulateComponentHtmlId6() throws Exception { + MockHttpServletRequest req = new MockHttpServletRequest(); + MockHttpServletResponse res = new MockHttpServletResponse(); + OgnlValueStack stack = new OgnlValueStack(); + + Submit submit = new Submit(stack, req, res); + submit.setAction("submitAction"); + submit.setMethod("submitMethod"); + + submit.populateComponentHtmlId(null); + + assertEquals("submitAction_submitMethod", submit.getParameters().get("id")); + } +} Propchange: struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/FormButtonTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java?rev=431149&view=auto ============================================================================== --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java (added) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java Sat Aug 12 23:45:27 2006 @@ -0,0 +1,63 @@ +/* + * $Id: StrutsTestCase.java 425615 2006-07-26 04:33:53Z tmjee $ + * + * Copyright 2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.struts2.components; + +import org.apache.struts2.StrutsTestCase; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; + +import com.opensymphony.xwork2.util.OgnlValueStack; + +/** + * + * @version $Date$ $Id$ + */ +public class UIBeanTest extends StrutsTestCase { + + public void testPopulateComponentHtmlId1() throws Exception { + OgnlValueStack stack = new OgnlValueStack(); + MockHttpServletRequest req = new MockHttpServletRequest(); + MockHttpServletResponse res = new MockHttpServletResponse(); + + Form form = new Form(stack, req, res); + form.getParameters().put("id", "formId"); + + TextField txtFld = new TextField(stack, req, res); + txtFld.setId("txtFldId"); + + txtFld.populateComponentHtmlId(form); + + assertEquals("txtFldId", txtFld.getParameters().get("id")); + } + + public void testPopulateComponentHtmlId2() throws Exception { + OgnlValueStack stack = new OgnlValueStack(); + MockHttpServletRequest req = new MockHttpServletRequest(); + MockHttpServletResponse res = new MockHttpServletResponse(); + + Form form = new Form(stack, req, res); + form.getParameters().put("id", "formId"); + + TextField txtFld = new TextField(stack, req, res); + txtFld.setName("txtFldName"); + + txtFld.populateComponentHtmlId(form); + + assertEquals("formId_txtFldName", txtFld.getParameters().get("id")); + } +} Propchange: struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java ------------------------------------------------------------------------------ svn:eol-style = native