我正在使用以下自定义组件在我的页面中显示某种指导。我被要求传递text
和styleClass
属性给这个组件。但不幸styleClass
的是,当该组件在页面中呈现时,单独的属性不会被应用。因此,我在我的标签组件中进行了硬编码。这一次的风格得到了正确的应用。不知道为什么。任何人都可以建议吗?
我可以看到styleClass
来自 css 的属性正在正确地传递给标记组件。正如我上面提到的,组件在没有应用传递的样式类的情况下被渲染。
如果我将我的风格硬编码如下,那么它就可以工作。
writer.writeAttribute("style", "background-color: #F1F5F2;font-size: 80%;left: 52em;position: absolute;text-align: left;width: 13.25em;z-index: 5;", null);
这是如何引起的,我该如何解决?
自定义组件使用如下
<mytags:guidanceBox text="#{FindPersonProps.MY_GUIDANCE_TEXT}" styleClass="guidance_css" />
源代码如下:
@FacesComponent(value="tags.guidanceBox")
public class GuidanceTag extends UIOutput {
@Override
public String getFamily() {
return "javax.faces.NamingContainer";
}
public GuidanceTag() {
}
@Override
public void encodeBegin(FacesContext context) throws IOException {
String guidanceText=(String) getAttributes().get("text");
//String styleClass=(String) getAttributes().get("styleClass");
//System.err.println("Text ["+guidanceText+"] Style ["+styleClass+"]");
ResponseWriter writer=context.getResponseWriter();
String clientId=getClientId(context);
writer.startElement("p", this);
writer.writeAttribute("style", "background-color: #F1F5F2;font-size: 80%;left: 52em;position: absolute;text-align: left;width: 13.25em;z-index: 5;", null);
writer.writeAttribute("name", clientId, "clientId");
writer.startElement("b", null);
writer.writeText("Guidance:", null);
writer.endElement("b");
writer.startElement("br", null);
writer.endElement("br");
writer.writeText(guidanceText, null);
writer.endElement("p");
}