程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了向JSF 2.0 UIInput组件添加自定义属性(HTML5)支持大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决向JSF 2.0 UIInput组件添加自定义属性(HTML5)支持?

开发过程中遇到向JSF 2.0 UIInput组件添加自定义属性(HTML5)支持的问题如何解决?下面主要结合日常开发的经验,给出你关于向JSF 2.0 UIInput组件添加自定义属性(HTML5)支持的解决方法建议,希望对你解决向JSF 2.0 UIInput组件添加自定义属性(HTML5)支持有所启发或帮助;

这是我的方式。我添加了占位符和数据主题属性。如果要添加更多属性,则应仅将其名称添加到attribute数组。

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;

import com.sun.faces.renderkit.HTML_basic.TextRenderer;

public class inputRender extends TextRenderer {

    @OverrIDe
    protected voID getEndTextToRender(FacesContext context,
            UIComponent component,
            String currentvalue)
     throws java.io.IOException{

        String [] attributes = {"placeholder","data-theme"};

        ResponseWriter writer = context.getResponseWriter();

        for(String attribute : attributes)
        {
            String value = (String)component.getAttributes().get(attributE);
            if(value != null) {                             
                writer.writeAttribute(attribute, value, attributE);
            }
        }

        super.getEndTextToRender(context, component, currentvalue);

    }

}

您应该将此添加到faces-config.xml文件。

 <render-kit>
    <renderer>
        <component-family>javax.faces.input</component-family>
        <renderer-type>javax.faces.Text</renderer-type>
        <renderer-class>your.package.inputRenderer</renderer-class>
    </renderer>
</render-kit>

解决方法

我正在尝试编写一个渲染器,该渲染器将处理组件placeholder上的属性<h:inputText>。在阅读了JSF2.0并去除了必需的HTML5属性之后,我走了这条路,这似乎是正确的。这是我的自定义渲染器

public class InputRenderer extends com.sun.faces.renderkit.html_basic.TextRenderer{

    @Override
    public void encodeBegin(FacesContext context,UIComponent component) 
    throws IOException {
        System.out.println("Rendering :"+component.getClientId());

        String placeholder = (String)component.getAttributes().get("placeholder");
        if(placeholder != null) { 
            ResponseWriter writer = context.getResponseWriter();
            writer.writeAttribute("placeholder",placeholder,"placeholder");
        }

        super.encodeBegin(context,component);

    }


    @Override
    public void decode(FacesContext context,UIComponent component) {
        super.decode(context,component);
    }

    @Override
    public void encodeEnd(FacesContext context,UIComponent component) 
    throws IOException {
        super.encodeEnd(context,component);
    }
}

并且此渲染器在faces config中注册为

 <render-kit>
    <renderer>
        <component-family>javax.faces.Input</component-family>
        <renderer-type>javax.faces.Text</renderer-type>
        <renderer-class>com.example.renderer.InputRenderer</renderer-class>
    </renderer>
</render-kit>

这被注册罚款,那里没有问题。

我的意图是处理该placeholder属性,将其插入,然后将处理委托给super。我上面的代码不起作用,因为我在错误的位置插入了属性。必须在writer.startElement('input')执行后将其插入。但是,startElement必须发生在super
encodeBegin()方法中的某个地方。那么,如何插入自定义属性(在这种情况下为“占位符”),然后继续执行流程?

注意:上面的代码确实向placeholder我想要的输入组件添加了一个属性,但未添加属性,而是将其写入到Input的父级(因为我试图在将组件本身实际写入流中之前写一个属性,将该属性应用于当前组件)

大佬总结

以上是大佬教程为你收集整理的向JSF 2.0 UIInput组件添加自定义属性(HTML5)支持全部内容,希望文章能够帮你解决向JSF 2.0 UIInput组件添加自定义属性(HTML5)支持所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。