Как прикрепить rich:tooltip
к списку, сгенерированному f:selectItems
при использовании переменной для атрибута for
внутри rich:tooltip
.
Этот код работает нормально (значение #{prefix}
равно theprefixvalue
<ui:composition>
<a4j:form id="#{prefix}_form">
<h:selectOneRadio style="text-align:left" id="#{prefix}_rating">
<f:selectItems value="#{test.options}"></f:selectItems>
</h:selectOneRadio>
<rich:toolTip for="theprefixvalue_form\:theprefixvalue_rating\:0">a</rich:toolTip>
</a4j:form>
</ui:composition>
Но этот код не:
<ui:composition>
<h:outputText value="#{prefix}" />
<a4j:form id="#{prefix}_form">
<h:selectOneRadio style="text-align:left" id="#{prefix}_rating">
<f:selectItems value="#{test.options}"></f:selectItems>
</h:selectOneRadio>
<rich:toolTip for="#{prefix}_form\:#{prefix}_rating\:0">a</rich:toolTip>
</a4j:form>
</ui:composition>
Выдает следующее исключение:
Caused by: java.lang.IllegalArgumentException: theprefixvalue_rating
at javax.faces.component.UIComponentBase.findComponent(UIComponentBase.java:612)
at org.ajax4jsf.renderkit.RendererUtils.findComponentFor(RendererUtils.java:1037)
at org.richfaces.renderkit.html.ToolTipRenderer.getTargetId(ToolTipRenderer.java:234)
at org.richfaces.renderkit.html.ToolTipRenderer.constructJSVariable(ToolTipRenderer.java:251)
...
TestBean имеет сессионную область, и это код для getOptions ();
public List<SelectItem> getOptions(){
List<SelectItem> options = new ArrayList<SelectItem>();
options.add(new SelectItem("a","a"));
options.add(new SelectItem("b","b"));
options.add(new SelectItem("c","c"));
return options;
}
Есть идеи? Цель состоит в том, чтобы иметь подсказку, когда указатель мыши находится над различными параметрами. Заранее спасибо.
Редактировать: Очевидно, HtmlSelectOneRadio
не реализует NamingContainer
, поэтому происходит сбой в UIComponentBase
строка 611:
(result
является экземпляром HtmlSelectOneRadio
, length>0
и segments[1] = "theprefixvalue_rating"
)
if (result != null && (!(result instanceof NamingContainer)) && length > 0) {
throw new IllegalArgumentException(segments[i]);
Я пытаюсь использовать свой собственный NamedHtmlSelectOneRadio
, который расширяет HtmlSelectOneRadio
и реализует NamingContainer
, но я все еще гадаю, как ввести его с помощью facelets. Есть идеи?