【问题标题】:Local value, submitted value and value本地值、提交值和值
【发布时间】:2013-12-10 18:35:24
【问题描述】:

我们有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.xhtmlsn-p

<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 将通过setSubmittedValue() 方法分配给UIInput 实例的属性submittedValue。 进一步在 process_validation_phase 我们从submittedValue 读取值并将我们的转换器应用于他。如果转换成功,我们将转换后的值传递给方法setValue(Objec o)submittedValue 将立即为null所以我的问题是

转换后的价值在哪里? UIInput 没有 value 属性。

【问题讨论】:

    标签: jsf jsf-2 custom-component


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 2017-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多