以下のカスタム コンポーネントを使用して、ページに何らかのガイダンスを表示しています。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");
}