2012-03-21 2 views

ответ

5

У меня нет элегантного решения, но это можно сделать. Я предполагаю, что JSF 2+ & Facelets VDL.

Для управляемого компонента 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; 
    } 
} 

установить атрибут title на узле DOM Вы можете использовать JavaScript:

<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) атрибута. У вас есть этот атрибут в обычном option теге в HTML, но не в jsf. Я думаю, вы должны использовать обычный select тег вместо selectOneMenu, чтобы получить значение title.

+1

«У вас есть этот атрибут в виде простого тега в HTML» - его широкое внедрение - это совсем недавняя вещь, но это только suppo по сравнению с IE9 и насколько я могу судить. Если его уже нет, запрос функции в JSF jira на javaserverfaces.java.net, вероятно, не так уж плох. – Gimby

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 для показа всплывающей подсказки для каждого элемента select.

<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>

если ваш идентификатор генерируется динамически или другим способом, например, для.

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

Это решение будет работать для всех динамически создаваемых идентификаторов, а также простой

1

Чтобы создать атрибут на сгенерированный optionstitle, вы можете просто использовать транзитную пересылку атрибуты, как это:

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

К сожалению, вы не можете использовать переменную, определенную с помощью '' внутри атрибута passthrough :(Но отображение BalusC в [этом ответе] (http://stackoverflow.com/questions/25511351/how-to-add-tooltip-to-fselectitems # 25512124), как обойти это ограничение с помощью 'c: forEach'. –

Смежные вопросы