📄 abstractrenderer.java
字号:
* <code>ResponseWriter</code>.</p>
*
* <p>The default implementation does nothing.</p>
*
* @param context <code>FacesContext</code> for the current request
* @param component <code>EditableValueHolder</code> component whose
* submitted value is to be stored
* @param writer <code>ResponseWriter</code> to which the element
* start should be rendered
*
* @exception IOException if an input/output error occurs
*/
protected void renderEnd(FacesContext context, UIComponent component,
ResponseWriter writer) throws IOException {
}
/**
* <p>Render any boolean attributes on the specified list that have
* <code>true</code> values on the corresponding attribute of the
* specified <code>UIComponent</code>.</p>
*
* @param context <code>FacesContext</code> for the current request
* @param component <code>EditableValueHolder</code> component whose
* submitted value is to be stored
* @param writer <code>ResponseWriter</code> to which the element
* start should be rendered
* @param names List of attribute names to be passed through
*
* @exception IOException if an input/output error occurs
*/
protected void renderBoolean(FacesContext context,
UIComponent component,
ResponseWriter writer,
String names[]) throws IOException {
if (names == null) {
return;
}
Map attributes = component.getAttributes();
boolean flag;
Object value;
for (int i = 0; i < names.length; i++) {
value = attributes.get(names[i]);
if (value != null) {
if (value instanceof String) {
flag = Boolean.valueOf((String) value).booleanValue();
} else {
flag = Boolean.valueOf(value.toString()).booleanValue();
}
if (flag) {
writer.writeAttribute(names[i], names[i], names[i]);
flag = false;
}
}
}
}
/**
* <p>Render any attributes on the specified list directly to the
* specified <code>ResponseWriter</code> for which the specified
* <code>UIComponent</code> has a non-<code>null</code> attribute value.
* This method may be used to "pass through" commonly used attribute
* name/value pairs with a minimum of code.</p>
*
* @param context <code>FacesContext</code> for the current request
* @param component <code>EditableValueHolder</code> component whose
* submitted value is to be stored
* @param writer <code>ResponseWriter</code> to which the element
* start should be rendered
* @param names List of attribute names to be passed through
*
* @exception IOException if an input/output error occurs
*/
protected void renderPassThrough(FacesContext context,
UIComponent component,
ResponseWriter writer,
String names[]) throws IOException {
if (names == null) {
return;
}
Map attributes = component.getAttributes();
Object value;
for (int i = 0; i < names.length; i++) {
value = attributes.get(names[i]);
if (value != null) {
if (value instanceof String) {
writer.writeAttribute(names[i], value, names[i]);
} else {
writer.writeAttribute(names[i], value.toString(), names[i]);
}
}
}
}
/**
* <p>Render the element start for the generated markup related to this
* component. Simple renderers that create a single markup element
* for this component should override this method and include a call
* to <code>startElement()</code> on the specified
* <code>ResponseWriter</code>.</p>
*
* <p>The default implementation does nothing.</p>
*
* @param context <code>FacesContext</code> for the current request
* @param component <code>EditableValueHolder</code> component whose
* submitted value is to be stored
* @param writer <code>ResponseWriter</code> to which the element
* start should be rendered
*
* @exception IOException if an input/output error occurs
*/
protected void renderStart(FacesContext context, UIComponent component,
ResponseWriter writer) throws IOException {
}
/**
* <p>If a submitted value was included on this request, store it in the
* component as appropriate.</p>
*
* <p>The default implementation determines whether this component
* implements <code>EditableValueHolder</code>. If so, it checks for a
* request parameter with the same name as the <code>clientId</code>
* of this <code>UIComponent</code>. If there is such a parameter, its
* value is passed (as a String) to the <code>setSubmittedValue()</code>
* method on the <code>EditableValueHolder</code> component.</p>
*
* @param context <code>FacesContext</code> for the current request
* @param component <code>EditableValueHolder</code> component whose
* submitted value is to be stored
*/
protected void setSubmittedValue
(FacesContext context, UIComponent component) {
if (!(component instanceof EditableValueHolder)) {
return;
}
String clientId = component.getClientId(context);
Map parameters = context.getExternalContext().getRequestParameterMap();
if (parameters.containsKey(clientId)) {
if (log.isTraceEnabled()) {
log.trace("setSubmittedValue(" + clientId + "," +
(String) parameters.get(clientId));
}
component.getAttributes().put("submittedValue",
parameters.get(clientId));
}
}
// --------------------------------------------------------- Private Methods
/**
* <p>Decode the current state of the specified UIComponent from the
* request contained in the specified <code>FacesContext</code>, and
* attempt to convert this state information into an object of the
* type equired for this component.</p>
*
* @param context FacesContext for the request we are processing
* @param component UIComponent to be decoded
*
* @exception NullPointerException if context or component is null
*/
/*
public void decode(FacesContext context, UIComponent component) {
// Enforce NPE requirements in the Javadocs
if ((context == null) || (component == null)) {
throw new NullPointerException();
}
// Only input components need to be decoded
if (!(component instanceof UIInput)) {
return;
}
UIInput input = (UIInput) component;
// Save the old value for use in generating ValueChangedEvents
Object oldValue = input.getValue();
if (oldValue instanceof String) {
try {
oldValue = getAsObject(context, component, (String) oldValue);
} catch (ConverterException e) {
;
}
}
input.setPrevious(oldValue);
// Decode and convert (if needed) the new value
String clientId = component.getClientId(context);
Map map = context.getExternalContext().getRequestParameterMap();
String newString = (String) map.get(clientId);
Object newValue = null;
try {
newValue = getAsObject(context, component, newString);
input.setValue(newValue);
input.setValid(true);
} catch (ConverterException e) {
input.setValue(newValue);
input.setValid(false);
addConverterMessage(context, component, e.getMessage());
}
}
*/
// --------------------------------------------------------- Package Methods
// ------------------------------------------------------- Protected Methods
/**
* <p>Add an error message denoting a conversion failure.</p>
*
* @param context The <code>FacesContext</code> for this request
* @param component The <code>UIComponent</code> that experienced
* the conversion failure
* @param text The text of the error message
*/
/*
protected void addConverterMessage(FacesContext context,
UIComponent component,
String text) {
String clientId = component.getClientId(context);
FacesMessage message = new FacesMessage
(text,
"Conversion error on component '" + clientId + "'");
context.addMessage(clientId, message);
}
*/
/**
* <p>Convert the String representation of this component's value
* to the corresponding Object representation. The default
* implementation utilizes the <code>getAsObject()</code> method of any
* associated <code>Converter</code>.</p>
*
* @param context The <code>FacesContext</code> for this request
* @param component The <code>UIComponent</code> whose value is
* being converted
* @param value The String representation to be converted
*
* @exception ConverterException if conversion fails
*/
/*
protected Object getAsObject(FacesContext context, UIComponent component,
String value) throws ConverterException {
// Identify any Converter associated with this component value
ValueBinding vb = component.getValueBinding("value");
Converter converter = null;
if (component instanceof ValueHolder) {
// Acquire explicitly assigned Converter (if any)
converter = ((ValueHolder) component).getConverter();
}
if ((converter == null) && (vb != null)) {
Class type = vb.getType(context);
if ((type == null) || (type == String.class)) {
return (value); // No conversion required for Strings
}
// Acquire implicit by-type Converter (if any)
converter = context.getApplication().createConverter(type);
}
// Convert the result if we identified a Converter
if (converter != null) {
return (converter.getAsObject(context, component, value));
} else {
return (value);
}
}
*/
/**
* <p>Convert the Object representation of this component's value
* to the corresponding String representation. The default implementation
* utilizes the <code>getAsString()</code> method of any associated
* <code>Converter</code>.</p>
*
* @param context The <code>FacesContext</code> for this request
* @param component The <code>UIComponent</code> whose value is
* being converted
* @param value The Object representation to be converted
*
* @exception ConverterException if conversion fails
*/
protected String getAsString(FacesContext context, UIComponent component,
Object value) throws ConverterException {
// Identify any Converter associated with this component value
ValueBinding vb = component.getValueBinding("value");
Converter converter = null;
if (component instanceof ValueHolder) {
// Acquire explicitly assigned Converter (if any)
converter = ((ValueHolder) component).getConverter();
}
if ((converter == null) && (vb != null)) {
// Acquire implicit by-type Converter (if any)
Class type = vb.getType(context);
if (type != null) {
converter = context.getApplication().createConverter(type);
}
}
// Convert the result if we identified a Converter
if (converter != null) {
return (converter.getAsString(context, component, value));
} else if (value == null) {
return ("");
} else if (value instanceof String) {
return ((String) value);
} else {
return (value.toString());
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -