Jsf 为UIInput创建自定义渲染器

Jsf 为UIInput创建自定义渲染器,jsf,custom-component,Jsf,Custom Component,我想为UIInput组件创建自定义渲染器。设置我创建的SourcePackageRenderers包和classRenderers.textfieldrender,如下所示 @FacesRenderer(componentFamily = "javax.faces.UIInput", rendererType = "text") public class TextFieldRender extends Renderer { @Override public void encod

我想为UIInput组件创建自定义渲染器。设置我创建的SourcePackage
Renderers
包和class
Renderers.textfieldrender
,如下所示

@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>
<?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
中定义的名称空间。当我错的时候?

你的taglib在哪里?@Templar在WEB-INF目录中。一切都错了,我不知道从哪里开始回答。组件族和渲染器类型未对齐(
text
mp.textdrenderer
不同)。component类引用的是一个标准API类,而不是一个自定义组件类,所以我真的不知道您到底想要实现什么。您确切地说,您希望为UIInput使用自定义呈现程序(因此:对于所有
组件…“嗯?”)。你没有展示你实际上打算如何使用它,所以很难理解。你试过看书吗?