Michael HönnigMichael Hönnig
Nachdem ich einen XHTML Codeblock von einer Seite auf eine andere verschoben hatte, gab es plötzlich die folgende Exception in meiner JSF (MyFaces+Tomahawk+RichFaces) Anwendung:
java.lang.IllegalArgumentException: ""
	at javax.faces.component.UIComponentBase.
                findComponent(UIComponentBase.java:576)
	at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.
                createOutputLabelMap(HtmlMessageRenderer.java:249)
	at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.
                createOutputLabelMap(HtmlMessageRenderer.java:264)
	at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.
                createOutputLabelMap(HtmlMessageRenderer.java:264)
	at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.
                createOutputLabelMap(HtmlMessageRenderer.java:264)
	at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.
                createOutputLabelMap(HtmlMessageRenderer.java:264)
	at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.
                createOutputLabelMap(HtmlMessageRenderer.java:264)
	at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.
                createOutputLabelMap(HtmlMessageRenderer.java:264)
	at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.
                getOutputLabelMap(HtmlMessageRenderer.java:231)
	at org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.
                findInputLabel(HtmlMessageRenderer.java:163)
Der Fehler trat auf, sobald Validierungs-Fehlermeldungen angezeigt werden sollten, die sich in einem <a4j:outputPanel> befanden. Der verschobene Codeblock war ebenfalls eine <a4j:outputPanel>. Ob dieser Umstand allerdings mit zur Fehlfunktion beitrug, habe ich nicht weiter analysiert. Ausgehend von der letzten lauffähigen Version habe ich dann durch teilweises Hereinnehmen des verschobenen Codes herausgefunden, dass die Ursache ein <t:outputLabel> war, welches keinem Eingabefeld zugeordnet war. Dieses befand sich innerhalb des verschobenen Codeblocks innerhalb eines <a4j:outputPanel>. Die Lösung war, dieses gegen ein <t:outputText> auszutauschen, welches in dem Fall sowieso das richtige Tag war. Irritierend war nur eben, dass der Code in der anderen Seite anstandslos funktionierte.