You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Antonio Petrelli (JIRA)" <ji...@apache.org> on 2006/07/10 12:02:16 UTC

[jira] Commented: (STR-2908) tiles display error/inconsistency

    [ http://issues.apache.org/struts/browse/STR-2908?page=comments#action_37696 ] 

Antonio Petrelli commented on STR-2908:
---------------------------------------

Did you try to use:
<tiles:importAttribute name="InfoHeader"/>

What you described seems to be a bug, but it would be useful to check whether your code works with the code above, because <tiles:importAttribute> could behave differently if the "name" attribute is specified.

> tiles display error/inconsistency
> ---------------------------------
>
>          Key: STR-2908
>          URL: http://issues.apache.org/struts/browse/STR-2908
>      Project: Struts 1
>         Type: Bug

>   Components: Tiles
>     Versions: 1.2.8
>  Environment: JRE v1.4.2, JDK1.4.2_07
> Ant v 1.6
>     Reporter: william edwards
>     Priority: Minor

>
> This problem occurs when I want to perform internationalisation, by feeding the keys from
> ApplicationResources.properties into the tile.
> 1) I set the name attribute in my tiles definition file.Note: the key is "some.heading"
>  In my tiles def. file I do something like this.
>   <put name="InfoHeader" value="some.heading" type="string"/>
>  In my JSP I do:
>  <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
>  <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
>  <tiles:importAttribute/>
>  <h1><bean:message name="InfoHeader"/></h1>
>  ..
>  This gives me a servletexception.
>  [ServletException in:/layouts/BodyInfoLayout.jsp] Property for message key
>  must be a String' javax.servlet.ServletException: Property for message key
>  must be a String at
>  ..
>  HOWEVER, if I do the following in my tiles definition file:
>   <put name="InfoHeader" value="some.heading" type="java.lang.String"/>
>  the above JSP works correctly. The problem is that it doesn't follow the
>  tiles config dtd The type is only supposed to be "string", "page" or "definition".
> And this is seen as a warning by the SaXParser in the compilation of the tiles-defs.xml.
> Fix problem and suggestion:
>  ===========
> (1) problem:
>  Having a look inside the code for the MessageTag class for the Bean tag
>      public int doStartTag() throws JspException {
>          String key = this.key;
>          if (key == null) {
>              // Look up the requested property value
>            Object value = TagUtils.getInstance().lookup(pageContext, name, property, scope);
>              if (value != null && !(value instanceof String)) {
>                  JspException e =
>                      new JspException(messages.getMessage("message.property", key));
>                 TagUtils.getInstance().saveException(pageContext, e);
>                  throw e;
>              }
>              key = (String) value;
>          }
> (2) Suggested solution
>  The value = "some.heading" turns out to be of type org.apache.struts.tiles.DirectStringAttribute, NOT java.lang.String , which causes
>  the code to go into the exception.
> Why not write the code as:
>      public int doStartTag() throws JspException {
>          String key = this.key;
>          if (key == null) {
>              // Look up the requested property value
>            Object value = TagUtils.getInstance().lookup(pageContext, name, property, scope);
> 	//begin code change
>            if (value == null)  {
>                  JspException e =
>                      new JspException(messages.getMessage("message.property", key));
>                 TagUtils.getInstance().saveException(pageContext, e);
>                  throw e;
>            }
>            key = value.toString();
> 	//end code change
> 	}
> </snip>

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/struts/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira