我们有UIInput
组件类,我们为他编写了自定义渲染器。
@FacesRenderer(componentFamily = "javax.faces.Input", rendererType = "text")
public class TextFieldRenderer extends Renderer{
@Override
public void encodeBegin(FacesContext context, UIComponent component) throws IOException{
String ClientId= component.getClientId(context);
String hint= (String) component.getAttributes().get("placeholder");
String styleClass= (String) component.getAttributes().get("styleClass");
String value =(String) component.getAttributes().get("value");
ResponseWriter writer= context.getResponseWriter();
writer.startElement("input", component);
writer.writeAttribute("type", "text", null);
writer.writeAttribute("name", ClientId, null);
writer.writeAttribute("placeholder", hint, "hint");
writer.writeAttribute("class", styleClass, "styleClass");
writer.writeAttribute("value", ((UIInput) component).getValue(), "value");
writer.endElement("input");
}
@Override
public void decode(FacesContext context, UIComponent component){
ExternalContext external= context.getExternalContext();
Map<String,String> request=external.getRequestParameterMap();
UIInput txt= (UIInput)component;
String clientId= component.getClientId(context);
String submittedValue= (String) request.get(clientId);
txt.setSubmittedValue(submittedValue);
}
}
和index.xhtml
代码段
<h:form>
<text:hintText id="ht" placeholder="hint" styleClass="geomClass fieldMarginClass">
<f:validateLength minimum="4"/>
</text:hintText>
<h:commandButton value="sub" styleClass="geomClass buttonMarginClass"/>
<h:message for="ht"/>
</h:form>
组件。
正如我所理解的那样,通过hintText
方法将输入到submittedValue
的表单子目标值分配给UIInput
实例的属性setSubmittedValue()
。
进一步在process_validation_phase,我们从submittedValue
读取值并将我们的转换器应用于他。如果转换成功,我们将转换后的值传递给方法setValue(Objec o)
和submittedValue
将是null
。 所以我的问题是:
转换价值位于何处? UIInput
没有值属性。
答案 0 :(得分:1)
UIInput
有getConvertedValue()
方法可检索转换后的值。您可以选择在渲染器中覆盖此方法,以对submittedValue
执行任何其他转换。否则,该方法返回原始submittedValue