You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Narayana S <na...@gmail.com> on 2008/09/18 11:44:43 UTC
Extending Struts 2 Tags
Hi,
i have a requirement of extending the struts 2 control tags like text
field, check box, select. i want to add a new attribute to the component,
which will allows to identify certain properties like visibility,
editability, label text from the database and render the component.
to implement this for text field i have created a class that extends
"org.apache.struts2.views.jsp.ui.TextFieldTag", from here i am trying to
assign label for the text field as "super.setLabel("Employee Number");". but
it is not rendering the label. can any one suggest me the correct process to
do this?
Thanks in advance
Re: Extending Struts 2 Tags
Posted by Alberto Flores <af...@umd.edu>.
I believe that at some point in your quest you are going to learn that
Struts2 tags delegate to a component (which you'll have to extend/use).
So a few questions (if overriding the label setter doesn't work).
- Are you using the "key" attribute on the tag (it's used to generate
the label).
- Are you using the "label" and "key" combined?
From the Struts2 source code (UIBean)
public void evaluateParams() {
addParameter("templateDir", getTemplateDir());
addParameter("theme", getTheme());
addParameter("dynamicAttributes", dynamicAttributes);
String name = null;
String providedLabel = null;
if (this.key != null) {
if(this.name == null) {
this.name = key;
}
if(this.label == null) {
// lookup the label from a TextProvider (default value is
the key)
providedLabel = TextProviderHelper.getText(key, key, stack);
}
}
if (this.name != null) {
name = findString(this.name);
addParameter("name", name);
}
if (label != null) {
addParameter("label", findString(label));
} else {
if (providedLabel != null) {
// label found via a TextProvider
addParameter("label", providedLabel);
}
}
....
}
So as you can see, the label (if not null, is expected to be resolved by
the findString() method. Please take a look at the source code for
further info. I have been overriding my messages (using the key)
successfully (and not using labels).
Hope this helps!
Narayana S wrote:
> Hi,
>
> i have a requirement of extending the struts 2 control tags like text
> field, check box, select. i want to add a new attribute to the component,
> which will allows to identify certain properties like visibility,
> editability, label text from the database and render the component.
>
> to implement this for text field i have created a class that extends
> "org.apache.struts2.views.jsp.ui.TextFieldTag", from here i am trying to
> assign label for the text field as "super.setLabel("Employee Number");". but
> it is not rendering the label. can any one suggest me the correct process to
> do this?
>
> Thanks in advance
>
--
--
Alberto
http://www.linkedin.com/in/aflores