【发布时间】: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