Jsf SelectItem的丰富工具提示
如何将Jsf SelectItem的丰富工具提示,jsf,richfaces,Jsf,Richfaces,如何将rich:tooltip附加到f:selectItems生成的列表中,该列表是在rich:tooltip中为for属性使用变量时生成的 此代码工作正常(#{prefix}的值是theprefixvalue <ui:composition> <a4j:form id="#{prefix}_form"> <h:selectOneRadio style="text-align:left" id="#{prefix}_rating"> <f:selectI
rich:tooltip
附加到f:selectItems
生成的列表中,该列表是在rich:tooltip
中为for
属性使用变量时生成的
此代码工作正常(#{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>
TestBean是会话作用域,这是getOptions()的代码
我正在尝试使用我自己的
namedhlselectoneradio
,它扩展了HtmlSelectOneRadio
,并实现了NamingContainer
,但我仍在猜测如何将其注入facelets。有什么想法吗?最后我设法解决了这个问题
我创建了自己的名为namedhlselectoneradio
的组件,它只是HtmlSelectOneRadio
的包装器,但实现了NamingContainer
。我不知道这是否会对JSF代码的其余部分产生进一步的影响,但我的测试用例运行良好。无论如何,如果我发现任何奇怪的行为,我会更新这个答案r、 以及我将在JSF的Mojarra实现中发布的关于HtmlSelectOneRadi
o为什么不实现NamingContainer
开箱即用的问题
以下是使用facelets创建您自己的组件的步骤
1.将课程包装起来:
导入javax.faces.component.NamingContainer;
导入javax.faces.component.html.HtmlSelectOneRadio
public class NamedHtmlSelectOneRadio extends HtmlSelectOneRadio implements NamingContainer {
public NamedHtmlSelectOneRadio(){
super();
}
}
2包装标记类并将上述类设置为组件类型:
import com.sun.faces.taglib.html_basic.SelectOneRadioTag;
public class NamedHtmlSelectOneRadioTag extends SelectOneRadioTag {
public NamedHtmlSelectOneRadioTag(){
super();
}
@Override
public String getComponentType() {
return "javax.faces.NamedHtmlSelectOneRadio";
}
}
3将组件添加到faces config.xml
配置中:
<component>
<component-type> com.eyeprevent.util.NamedHtmlSelectOneRadio </component-type>
<component-class> com.eyeprevent.util.NamedHtmlSelectOneRadio </component-class>
</component>
仅此而已!我错误地启用了它,我不知道如何禁用它(无法编辑)。一旦文章成为社区Wiki,它就被认为是社区的所有者,因此该标志无法撤消。
if (result != null && (!(result instanceof NamingContainer)) && length > 0) {
throw new IllegalArgumentException(segments[i]);
public class NamedHtmlSelectOneRadio extends HtmlSelectOneRadio implements NamingContainer {
public NamedHtmlSelectOneRadio(){
super();
}
}
import com.sun.faces.taglib.html_basic.SelectOneRadioTag;
public class NamedHtmlSelectOneRadioTag extends SelectOneRadioTag {
public NamedHtmlSelectOneRadioTag(){
super();
}
@Override
public String getComponentType() {
return "javax.faces.NamedHtmlSelectOneRadio";
}
}
<component>
<component-type> com.eyeprevent.util.NamedHtmlSelectOneRadio </component-type>
<component-class> com.eyeprevent.util.NamedHtmlSelectOneRadio </component-class>
</component>
<tag>
<tag-name>namedSelectOneRadio</tag-name>
<component>
<component-type>com.eyeprevent.util.NamedHtmlSelectOneRadio</component-type>
</component>
</tag>`
xmlns:fnc="http://eyeprevent.com/fnc"
...
<fnc:namedSelectOneRadio id="#{prefix}_rating">
<f:selectItems value="#{test.options}"></f:selectItems>
</fnc:namedSelectOneRadio>
<rich:toolTip for="#{prefix}_form\:#{prefix}_rating:0">a</rich:toolTip>