本地价值,提交的价值和价值

时间:2013-12-10 18:35:24

标签: jsf jsf-2 custom-component

我们有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没有值属性。

1 个答案:

答案 0 :(得分:1)

UIInputgetConvertedValue()方法可检索转换后的值。您可以选择在渲染器中覆盖此方法,以对submittedValue执行任何其他转换。否则,该方法返回原始submittedValue