1 Minuten Lesezeit (249 Worte)

Barrierefreie JSF-Komponenten

In JSF-Projekten stößt man schnell an die Genzen, wenn es um das Thema Barrierefreiheit geht. Die meisten Renderer der jeweiligen JSF-Komponenten tragen diesem Konzept leider viel zu selten Rechnung. Häufig fehlt die Möglichkeit in den HTML-Komponenten die notwendigen ARIA-Attribute zu setzen.

Seit JSF 2.0 besteht jedoch die Möglichkeit die Renderer von JSF-Komponenten zu erweitern. Diese Mechanik eignet sich sehr gut dazu, um die Komponenten Barrierefrei zu machen. Eine Beispielhafte Lösung eines Renderers für ein Eingabefeld könnte wie folgt aussehen:

public class InputTextRendererWithAriaSupport extends TextRenderer {
 
  enum AriaAttribute{
      REQUIRED("aria-required"),
      READONLY("aria-readonly"),
      AUTOCOMPLETE("aria-autocomplete"),
      MULTILINE("aria-multiline"),
      LABEL("aria-label"),
      CHECKED("aria-checked");
       
      private String attributeName;
       
      private AriaAttribute (String attributeName){
          this.attributeName = attributeName;
      }
 
      public String getAttributeName() {
          return attributeName;
      }
  } 
     
  @Override
  protected void getEndTextToRender(FacesContext context, UIComponent component, String currentValue)
  throws java.io.IOException {
 
    ResponseWriter writer = context.getResponseWriter();
    for (AriaAttribute ariaAttribut : AriaAttribute.values()) {
      // Prüfen, ob eins der ARIA-Attribute gesetzt wurde.
      String value = (String) component.getAttributes().get(ariaAttribut.getAttributeName());
       
      if (value != null) {
        //Das ARIA-Attribut wird mit den zugehörigen Wert geschrieben und
        //der Kompente angehangen. 
        writer.writeAttribute(ariaAttribut.getAttributeName(), value, ariaAttribut.getAttributeName());
      }
    }
    //Die Methode EndTextToRender der Superklasse aufrufen
    super.getEndTextToRender(context, component, currentValue);
  }
} 

Hier wird die Methode "getEndTextToRender" besteht nun die Möglichkeit in den Renderprozess der Komponente einzugreifen und diese dynamisch mit Attributen zu erweitern.

Anschließend muss noch der Renderer "javax.faces.text" in der faces-config.xml überschrieben werden:

<render-kit>
    <renderer>
        <component-family>javax.faces.Input</component-family>
        <renderer-type>javax.faces.Text</renderer-type>
        <renderer-class>de.ordix.jsf.InputTextRendererWithAriaSupport</renderer-class>
    </renderer>
</render-kit> 

Der generierte HTML-Code besitzt von nun an auch die notwendigen ARIA-Elemente:

<input aria-required="true" aria-readonly="true" id="meinFormular:textField" type="text" name="meinFormular:textField" /> 
{loadmoduleid 179}

Senior Chief Consultant bei ORDIX

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Donnerstag, 25. April 2024

Sicherheitscode (Captcha)

×
Informiert bleiben!

Bei Updates im Blog, informieren wir per E-Mail.

Weitere Artikel in der Kategorie