@ Override public void doRender ( final WComponent component , final WebXmlRenderContext renderContext ) { AbstractWFieldIndicator fieldIndicator = ( AbstractWFieldIndicator ) component ; XmlStringBuilder xml = renderContext . getWriter ( ) ; WComponent validationTarget = fieldIndicator . getTargetComponent ( ) ; // no need to render an indicator for nothing. // Diagnosables takes care of thieir own messaging. if ( validationTarget == null || ( validationTarget instanceof Diagnosable && ! ( validationTarget instanceof Input ) ) ) { return ; } if ( validationTarget instanceof Input && ! ( ( Input ) validationTarget ) . isReadOnly ( ) ) { return ; } List < Diagnostic > diags = fieldIndicator . getDiagnostics ( ) ; if ( diags != null && ! diags . isEmpty ( ) ) { xml . appendTagOpen ( "ui:fieldindicator" ) ; xml . appendAttribute ( "id" , component . getId ( ) ) ; xml . appendOptionalAttribute ( "track" , component . isTracking ( ) , "true" ) ; switch ( fieldIndicator . getFieldIndicatorType ( ) ) { case INFO : xml . appendAttribute ( "type" , "info" ) ; break ; case WARN : xml . appendAttribute ( "type" , "warn" ) ; break ; case ERROR : xml . appendAttribute ( "type" , "error" ) ; break ; default : throw new SystemException ( "Cannot paint field indicator due to an invalid field indicator type: " + fieldIndicator . getFieldIndicatorType ( ) ) ; } xml . appendAttribute ( "for" , fieldIndicator . getRelatedFieldId ( ) ) ; xml . appendClose ( ) ; for ( Diagnostic diag : diags ) { xml . appendTag ( "ui:message" ) ; xml . appendEscaped ( diag . getDescription ( ) ) ; xml . appendEndTag ( "ui:message" ) ; } xml . appendEndTag ( "ui:fieldindicator" ) ; } }
Paints the given AbstractWFieldIndicator .