我想为UIInput组件创建自定义渲染器。 Et SourcePackage我创建了Renderers
包和类Renderers.TextFieldRenderer
,后面是
@FacesRenderer(componentFamily = "javax.faces.UIInput", rendererType = "text")
public class TextFieldRender extends Renderer {
@Override
public void encodeBegin(FacesContext context, UIComponent component) throws IOException {
ResponseWriter writer = context.getResponseWriter();
String clientId = component.getClientId(context);
String hint= (String) component.getAttributes().get("placeholder");
writer.startElement("input", component);
writer.writeAttribute("name", clientId, null);
writer.writeAttribute("placeholder", hint, "hint");
writer.endElement("input");
}
}
此外我创建了faces-config.xml
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<component>
<component-type>mp.text</component-type>
<component-class>javax.faces.component.UIInput</component-class>
</component>
<render-kit>
<renderer>
<component-family>javax.faces.component.UIInput</component-family>
<renderer-type>mp.textrender</renderer-type>
<renderer-class>Renderers.TextFieldRenderer</renderer-class>
</renderer>
</render-kit>
</faces-config>
和text.taglib.xml
<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib>
<namespace>http://text.com</namespace>
<tag>
<tag-name>hintText</tag-name>
<component>
<component-type>mp.text</component-type>
<renderer-type>mp.textrenderer</renderer-type>
</component>
</facelet-taglib>
但它不起作用。即使我不能使用text.taglib.xml
中定义的命名空间。当我错了?