diff --git a/core/src/main/resources/template/css_xhtml/checkbox.ftl b/core/src/main/resources/template/css_xhtml/checkbox.ftl
index a7ffc43d3..004f67471 100644
--- a/core/src/main/resources/template/css_xhtml/checkbox.ftl
+++ b/core/src/main/resources/template/css_xhtml/checkbox.ftl
@@ -41,7 +41,12 @@ lables
#list>
<#t/>
#if>
-<#if parameters.labelposition?default("") == 'left'>
+<#if !parameters.labelposition?? && (parameters.form.labelposition)??>
+<#assign labelpos = parameters.form.labelposition/>
+<#elseif parameters.labelposition??>
+<#assign labelpos = parameters.labelposition/>
+#if>
+<#if labelpos?default("") == 'left'>
<#if parameters.id??>id="wwlbl_${parameters.id}"<#rt/>#if> class="wwlbl">
@@ -57,7 +62,7 @@ lables
#if>
-<#if parameters.labelposition?default("top") == 'top'>
+<#if labelpos?default("top") == 'top'>
<#else>
@@ -69,14 +74,14 @@ lables
#if>
<#include "/${parameters.templateDir}/simple/checkbox.ftl" />
-<#if parameters.labelposition?default("") != 'left'>
-<#if parameters.labelposition?default("top") == 'top'>
+<#if labelpos?default("") != 'left'>
+<#if labelpos?default("top") == 'top'>
<#rt/>
<#else>
<#rt/>
#if>
<#if parameters.label??>
-<#if parameters.labelposition?default("top") == 'top'>
+<#if labelpos?default("top") == 'top'>
<#else>
@@ -95,7 +100,7 @@ lables
#if>
#if>
<#if parameters.label??>
-<#if parameters.labelposition?default("top") == 'top'>
+<#if labelpos?default("top") == 'top'>
<#rt/>
<#else>
<#rt/>
diff --git a/core/src/main/resources/template/css_xhtml/controlfooter.ftl b/core/src/main/resources/template/css_xhtml/controlfooter.ftl
index 2f4c66271..2783a0ba0 100644
--- a/core/src/main/resources/template/css_xhtml/controlfooter.ftl
+++ b/core/src/main/resources/template/css_xhtml/controlfooter.ftl
@@ -22,7 +22,12 @@
-->
${parameters.after?if_exists}<#t/>
<#lt/>
-<#if parameters.labelposition?default("top") == 'top'>
+<#if !parameters.labelposition?? && (parameters.form.labelposition)??>
+<#assign labelpos = parameters.form.labelposition/>
+<#elseif parameters.labelposition??>
+<#assign labelpos = parameters.labelposition/>
+#if>
+<#if labelpos?default("top") == 'top'>
<#rt/>
<#else>
<#rt/>
diff --git a/core/src/main/resources/template/css_xhtml/controlheader-core.ftl b/core/src/main/resources/template/css_xhtml/controlheader-core.ftl
index 902cda5ac..2a5c98b55 100644
--- a/core/src/main/resources/template/css_xhtml/controlheader-core.ftl
+++ b/core/src/main/resources/template/css_xhtml/controlheader-core.ftl
@@ -43,8 +43,13 @@
#if>
#if>
+<#if !parameters.labelposition?? && (parameters.form.labelposition)??>
+<#assign labelpos = parameters.form.labelposition/>
+<#elseif parameters.labelposition??>
+<#assign labelpos = parameters.labelposition/>
+#if>
<#if parameters.label??>
-<#if parameters.labelposition?default("top") == 'top'>
+<#if labelpos?default("top") == 'top'>
<#else>
@@ -66,7 +71,7 @@
${parameters.label?html}${parameters.labelseparator!":"?html}
<#include "/${parameters.templateDir}/xhtml/tooltip.ftl" />
<#t/>
-<#if parameters.labelposition?default("top") == 'top'>
+<#if labelpos?default("top") == 'top'>
<#rt/>
<#else>
<#rt/>
diff --git a/core/src/main/resources/template/css_xhtml/controlheader.ftl b/core/src/main/resources/template/css_xhtml/controlheader.ftl
index 4099c7a2d..9e4737790 100644
--- a/core/src/main/resources/template/css_xhtml/controlheader.ftl
+++ b/core/src/main/resources/template/css_xhtml/controlheader.ftl
@@ -21,7 +21,12 @@
*/
-->
<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlheader-core.ftl">
-<#if parameters.labelposition?default("top") == 'top'>
+<#if !parameters.labelposition?? && (parameters.form.labelposition)??>
+<#assign labelpos = parameters.form.labelposition/>
+<#elseif parameters.labelposition??>
+<#assign labelpos = parameters.labelposition/>
+#if>
+<#if labelpos?default("top") == 'top'>
<#else>
diff --git a/core/src/main/resources/template/css_xhtml/reset.ftl b/core/src/main/resources/template/css_xhtml/reset.ftl
index 790bcfc04..6d7734f99 100644
--- a/core/src/main/resources/template/css_xhtml/reset.ftl
+++ b/core/src/main/resources/template/css_xhtml/reset.ftl
@@ -20,7 +20,12 @@
* under the License.
*/
-->
-<#if parameters.labelposition?default("top") == 'top'>
+<#if !parameters.labelposition?? && (parameters.form.labelposition)??>
+<#assign labelpos = parameters.form.labelposition/>
+<#elseif parameters.labelposition??>
+<#assign labelpos = parameters.labelposition/>
+#if>
+<#if labelpos?default("top") == 'top'>
<#else>
@@ -33,7 +38,7 @@
#if>
><#t/>
<#include "/${parameters.templateDir}/simple/reset.ftl" />
-<#if parameters.labelposition?default("top") == 'top'>
+<#if labelpos?default("top") == 'top'>
<#t/>
<#else>
<#t/>
diff --git a/core/src/main/resources/template/css_xhtml/submit-close.ftl b/core/src/main/resources/template/css_xhtml/submit-close.ftl
index 423c5d743..15c608af4 100644
--- a/core/src/main/resources/template/css_xhtml/submit-close.ftl
+++ b/core/src/main/resources/template/css_xhtml/submit-close.ftl
@@ -1,5 +1,10 @@
<#include "/${parameters.templateDir}/simple/submit-close.ftl" />
-<#if parameters.labelposition?default("top") == 'top'>
+<#if !parameters.labelposition?? && (parameters.form.labelposition)??>
+<#assign labelpos = parameters.form.labelposition/>
+<#elseif parameters.labelposition??>
+<#assign labelpos = parameters.labelposition/>
+#if>
+<#if labelpos?default("top") == 'top'>
<#t/>
<#else>
<#t/>
diff --git a/core/src/main/resources/template/css_xhtml/submit.ftl b/core/src/main/resources/template/css_xhtml/submit.ftl
index 68b2a9c91..ffb4df99a 100644
--- a/core/src/main/resources/template/css_xhtml/submit.ftl
+++ b/core/src/main/resources/template/css_xhtml/submit.ftl
@@ -20,7 +20,12 @@
* under the License.
*/
-->
-<#if parameters.labelposition?default("top") == 'top'>
+<#if !parameters.labelposition?? && (parameters.form.labelposition)??>
+<#assign labelpos = parameters.form.labelposition/>
+<#elseif parameters.labelposition??>
+<#assign labelpos = parameters.labelposition/>
+#if>
+<#if labelpos?default("top") == 'top'>
<#else>
diff --git a/core/src/main/resources/template/xhtml/checkbox.ftl b/core/src/main/resources/template/xhtml/checkbox.ftl
index 878c63236..4504b3f61 100644
--- a/core/src/main/resources/template/xhtml/checkbox.ftl
+++ b/core/src/main/resources/template/xhtml/checkbox.ftl
@@ -34,7 +34,12 @@
#list>
#if>
-<#if parameters.labelposition?default("") == 'top'>
+<#if !parameters.labelposition?? && (parameters.form.labelposition)??>
+<#assign labelpos = parameters.form.labelposition/>
+<#elseif parameters.labelposition??>
+<#assign labelpos = parameters.labelposition/>
+#if>
+<#if labelpos?default("") == 'top'>
|
<#if parameters.label??>
@@ -68,7 +73,7 @@ ${parameters.label?html}<#t/>
<#else>
|
|
-<#if parameters.labelposition?default("") == 'left'>
+<#if labelpos?default("") == 'left'>
<#if parameters.label??>
<#if parameters.id??>
for="${parameters.id?html}"<#rt/>
@@ -93,7 +98,7 @@ ${parameters.label?html}<#t/>
<#t/>
#if>
#if>
-<#if parameters.labelposition?default("") == 'right'>
+<#if labelpos?default("") == 'right'>
<#if parameters.required?default(false)>
*<#t/>
#if>
@@ -104,10 +109,10 @@ ${parameters.label?html}<#t/>
|
-<#if parameters.labelposition?default("") != 'top'>
+<#if labelpos?default("") != 'top'>
<#include "/${parameters.templateDir}/simple/checkbox.ftl" />
#if>
-<#if parameters.labelposition?default("") != 'top' && parameters.labelposition?default("") != 'left'>
+<#if labelpos?default("") != 'top' && labelpos?default("") != 'left'>
<#if parameters.label??>
<#if parameters.id??>
for="${parameters.id?html}"<#rt/>
diff --git a/core/src/main/resources/template/xhtml/controlheader-core.ftl b/core/src/main/resources/template/xhtml/controlheader-core.ftl
index f909c89f0..73302705f 100644
--- a/core/src/main/resources/template/xhtml/controlheader-core.ftl
+++ b/core/src/main/resources/template/xhtml/controlheader-core.ftl
@@ -36,12 +36,17 @@
#list>
#if>
#if>
+<#if !parameters.labelposition?? && (parameters.form.labelposition)??>
+<#assign labelpos = parameters.form.labelposition/>
+<#elseif parameters.labelposition??>
+<#assign labelpos = parameters.labelposition/>
+#if>
<#--
if the label position is top,
then give the label it's own row in the table
-->
|
-<#if parameters.labelposition?default("") == 'top'>
+<#if labelpos?default("") == 'top'>
| <#rt/>
<#else>
| <#rt/>
@@ -70,7 +75,7 @@ ${parameters.labelseparator?default(":")?html}<#t/>
#if>
| <#lt/>
<#-- add the extra row -->
-<#if parameters.labelposition?default("") == 'top'>
+<#if labelpos?default("") == 'top'>
#if>
diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java
index 77fac5da3..c9427d1ce 100644
--- a/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java
+++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java
@@ -622,6 +622,88 @@ public class FormTagTest extends AbstractUITagTest {
}
+ public void testFormWithTopLabelPosition() throws Exception {
+ FormTag form = new FormTag();
+ form.setTheme("xhtml");
+ form.setAction("testAction");
+ form.setPageContext(pageContext);
+ form.setIncludeContext(false);
+ form.setLabelposition("top");
+
+ TextFieldTag text = new TextFieldTag();
+ text.setPageContext(pageContext);
+ text.setLabel("label");
+
+ form.doStartTag();
+ text.doStartTag();
+ text.doEndTag();
+ form.doEndTag();
+
+ verify(FormTag.class.getResource("Formtag-27.txt"));
+ }
+
+ public void testFormWithTopLabelPositionWithElementOverride() throws Exception {
+ FormTag form = new FormTag();
+ form.setTheme("xhtml");
+ form.setAction("testAction");
+ form.setPageContext(pageContext);
+ form.setIncludeContext(false);
+ form.setLabelposition("left");
+
+ TextFieldTag text = new TextFieldTag();
+ text.setPageContext(pageContext);
+ text.setLabel("label");
+ text.setLabelposition("top");
+
+ form.doStartTag();
+ text.doStartTag();
+ text.doEndTag();
+ form.doEndTag();
+
+ verify(FormTag.class.getResource("Formtag-27.txt"));
+ }
+
+ public void testFormWithTopLabelPositionCssXhtml() throws Exception {
+ FormTag form = new FormTag();
+ form.setTheme("css_xhtml");
+ form.setAction("testAction");
+ form.setPageContext(pageContext);
+ form.setIncludeContext(false);
+ form.setLabelposition("top");
+
+ TextFieldTag text = new TextFieldTag();
+ text.setPageContext(pageContext);
+ text.setLabel("label");
+
+ form.doStartTag();
+ text.doStartTag();
+ text.doEndTag();
+ form.doEndTag();
+
+ verify(FormTag.class.getResource("Formtag-28.txt"));
+ }
+
+ public void testFormWithTopLabelPositionWithElementOverrideCssXhtml() throws Exception {
+ FormTag form = new FormTag();
+ form.setTheme("css_xhtml");
+ form.setAction("testAction");
+ form.setPageContext(pageContext);
+ form.setIncludeContext(false);
+ form.setLabelposition("left");
+
+ TextFieldTag text = new TextFieldTag();
+ text.setPageContext(pageContext);
+ text.setLabel("label");
+ text.setLabelposition("top");
+
+ form.doStartTag();
+ text.doStartTag();
+ text.doEndTag();
+ form.doEndTag();
+
+ verify(FormTag.class.getResource("Formtag-28.txt"));
+ }
+
@Override
protected void setUp() throws Exception {
super.setUp();
diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-27.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-27.txt
new file mode 100644
index 000000000..fab8cf3d3
--- /dev/null
+++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-27.txt
@@ -0,0 +1,10 @@
+
diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-28.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-28.txt
new file mode 100644
index 000000000..70f3e06c5
--- /dev/null
+++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-28.txt
@@ -0,0 +1,10 @@
+