向JSF 2.0 UIInput组件添加自定义属性(HTML5)支持

我正在尝试编写一个渲染器,该渲染器将处理组件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的父级(因为我试图在将组件本身实际写入流中之前写一个属性,将该属性应用于当前组件)

回答:

这是我的方式。我添加了占位符和数据主题属性。如果要添加更多属性,则应仅将其名称添加到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>

以上是 向JSF 2.0 UIInput组件添加自定义属性(HTML5)支持 的全部内容, 来源链接: utcz.com/qa/412757.html

回到顶部