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