2012-03-21 70 views
8

是否有可能增加一个 “标题” 属性添加到标记在JSF,例如:的<f:selectItems的> JSF标签定制工具提示属性

<f:selectItems value="#{foo.fooList}" title="{foo.fooDescription}"/> 

生成的HTML:

<select> 
    <option value="foo1" title="description1">foo ex1</option> 
    <option value="foo2" title="description2">foo ex2</option> 
</select> 

回答

5

我没有一个优雅的解决方案,但它可以完成。我假设JSF 2+ & Facelets VDL。

对于托管bean Foo

@ManagedBean @RequestScoped 
public class Foo { 
    private List<SelectItem> fooList = Arrays.asList(
      new SelectItem("value1", "label1", "description1"), 
      new SelectItem("value2", "label2", "description2")); 

    public List<SelectItem> getFooList() { 
    return fooList; 
    } 
} 

您可以使用JavaScript来设置DOM节点上的title属性:

<h:selectOneMenu binding="#{requestScope.fooSelectOne}"> 
    <f:selectItems value="#{foo.fooList}" /> 
</h:selectOneMenu> 
<script> 
(function() { 
    var selectName = '#{requestScope.fooSelectOne.clientId}'; 
    var kids = document.getElementsByName(selectName)[0] 
        .getElementsByTagName("option"); 
    var index = 0; 
    <ui:repeat value="#{foo.fooList}" var="_opt"> 
    kids[index++].title = '#{_opt.description}'; //TODO: escape this 
    </ui:repeat> 
}()); 
</script> 
0

我认为f:selectItems标签没有这样的(title)属性可用。您在HTML中的简单option标记中具有此属性,但不在​​中。我认为你应该使用普通select标记而不是selectOneMenu来获得title值。

+1

“您在HTML中的纯选项标签中具有此属性” - 它的广泛采用是相当近期的事情,但它仅支持据我所知,从IE9开始。如果还没有,那么javaserverfaces.java.net上的JSF jira中的功能请求可能不是一件坏事。 – Gimby 2013-01-07 09:26:16

0

假设你<h:selectOneMenu如下所示。

<h:form id="myForm"> 
    <h:selectOneMenu id="myCombo"> 
    <f:selectItems value="#{foo.fooList}"/> 
    </h:selectOneMenu> 
</h:form> 

现在在window.onload您可以通过option小号迭代,并添加title如下

<script> 
    window.onload = function() { 
     var options = document.getElementById("myForm:myCombo").options; 
     for(var i = 0; i &lt; options.length; i++) { 
      options[i].title = "description" + i; 
     } 
    } 
</script> 
0

itemDescription属性将不会出现在煤层2.2。

最好的解决方案是使用JavaScript来显示每个选择项目的工具提示。

<script type="text\javascript"> 
 
    function getTooltip(id){ 
 
    var options = document.getElementById(id).options; 
 
     for(var i = 0; i &lt; options.length; i++) { 
 
      options[i].title = "description" + i; 
 
     } 
 
    } 
 
</script>

如果是动态或其他方式产生你的ID,用于如。

<rich:dataTable value="#{mybean.list}"> 
    <h:selectOneMenu value="#{mybean.selectedValue}" onmouseover=getTooltip(this.id)> 
    <f:selectitems value="#{mybean.selectlist}"> 
    </h:selectOneMenu> 
</rich:datatable> 

该解决方案将所有动态生成的ID以及简单

1

要生成您的生成options一个title属性,你可以简单地使用直通属性,像这样的工作:

<f:selectItems value="#{values}" p:title="Your title here"/> 
+1

不幸的是,您不能使用通过''在passthrough-attribute :(。但在[this answer]中显示的BalusC定义的变量(http://stackoverflow.com/questions/25511351/how-to-add-tooltip-to-fselectitems#25512124)如何通过'c:forEach'解决这个限制。 – 2017-02-28 13:45:45

相关问题