我正在使用下面的自定义组件在我的页面中显示某种指导。我被要求将text
和styleClass
属性传递给此组件。但遗憾的是,当此组件在页面中呈现时,不会单独应用styleClass
属性。因此我在我的标签组件中进行了硬编码。这种时间风格正在得到应用。不知道为什么。可以任何一个sugegst?
我可以看到来自css的styleClass
属性正确传递给标记组件。正如我上面提到的那样,组件将在应用的传递样式类中进行渲染。
如果我硬编码我的风格如下,那么它正在发挥作用。
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");
}
答案 0 :(得分:2)
您应该实现TagHandler,即将属性传递给组件本身的实现。像这样:
public class GuidanceTagHandler extends ComponentHandler {
public GuidanceTagHandler(ComponentConfig config) {
super(config);
}
@Override
protected void onComponentCreated(FaceletContext ctx, UIComponent c, UIComponent parent) {
super.onComponentCreated(ctx, c, parent);
TagAttribute styleClassAttribute = getRequiredAttribute("styleClass");
c.getAttributes().put("styleClass", styleClassAttribute);
}
}
在taglib.xml中,您应该拥有组件的签名:
<tag>
<tag-name>guidanceTag</tag-name>
<component>
<component-type>guidance</component-type>
<handler-class>yourpackages.GuidanceTagHandler</handler-class>
</component>
</tag>
最后在faces.config中(它将绑定在component-type
属性
<component>
<component-type>guidance</component-type>
<component-class>yourpackages.GuidanceTag</component-class>
</component>
我希望这个答案会对你有所帮助,因为我曾经遇到同样的问题。所以这就是我提出的解决方案。