styleClass attribute values that include spaces need to be treated as multiple
style classes rather than one huge style class
-----------------------------------------------------------------------------------------------------------------------------
Key: ADFFACES-321
URL: http://issues.apache.org/jira/browse/ADFFACES-321
Project: MyFaces ADF-Faces
Issue Type: Bug
Components: Skinning
Reporter: Matt Cooper
If you specify styleClass="Foo" on a component, its encoded HTML will be
something like class="xyz" (the compressed equivalent).
If you specify styleClass="Foo Bar" on a component, its encoded HTML is
class="Foo Bar" when it should have been something like class="xyz xzz". The
reason why the compressed equivalents are not being encoded properly is that
the list of style class names are actually not being treated as a multiple
class names. Instead, the entire string "xyz xzz" is passed into the
RenderingContext.getStyleClass() method rather than tokenizing the string into
each of the style classes first and then passing them into the getStyleClass()
method.
Although the generated CSS files include both totally compressed and totally
uncompressed style definitions, this is still a problem because CSS definitions
span across multiple DOM elements.
Here's a simpler example, let's say we have a (fictional) component called
"companyLogo" with a style of:
af|companyLogo {
background-image: url('red-apache-leaf.png');
width: 100px;
height: 30px;
}
This makes it easy for page developers to place the logo on their pages by
simply defining:
<tr:companyLogo/>
One day, one of the page developers is working on a page layout and finds that
the logo needs to be placed in a layout area where the layout has a background
red background color. Since the logo is red and the background is red, the
logo will be very hard to see.
Since the page layout has a style defined for the red background:
.MyPageLayoutRedArea {
background-color: red;
width: 500px;
height: 100px;
}
All the page developer needs to do is add one more definition to his or her
skin to make it all better:
.MyPageLayoutRedArea af|companyLogo {
background-image: url('white-apache-logo.png');
}
The page source looks something like this:
<tr:panelGroupLayout styleClass="MyPageLayoutRedArea">
<tr:companyLogo/>
</tr:panelGroupLayout>
This works great because the containment style causes the companyLogo to render
with the alternate background image.
However the "MyPageLayoutRedArea" is very specific to the particular page
layout so it's not very reusable. Any extra styles defined in the
MyPageLayoutRedArea container might not always be desired when switching the
logo to a white graphic so it would be best to separate the CSS into proper
groupings like this:
af|companyLogo {
background-image: url('red-apache-leaf.png');
width: 100px;
height: 30px;
}
.AFDarkToneContainer af|companyLogo {
background-image: url('white-apache-logo.png');
}
.MyPageLayoutRedArea {
background-color: red;
width: 500px;
height: 100px;
}
Then the page source would look like this:
<tr:panelGroupLayout styleClass="AFDarkToneContainer MyPageLayoutRedArea">
<tr:companyLogo/>
</tr:panelGroupLayout>
but because of the styleClass value bug described above, the generated HTML
will yield a CSS hierarchy of "AFDarkToneContainer xzz" which is not in the
generated CSS file instead of "xyz xzz" which is in the generated CSS file.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira