2012-03-21 12 views
8

यह JSF में टैग के लिए एक "शीर्षक" विशेषता जोड़ने के लिए संभव उदाहरण के लिए, है:<च: 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

मेरे पास एक सुरुचिपूर्ण समाधान नहीं है, लेकिन यह किया जा सकता है। मैं जेएसएफ 2+ & फेसलेट वीडीएल मान रहा हूं।

एक प्रबंधित सेम 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 विशेषता निर्धारित करने 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) विशेषता उपलब्ध नहीं है। आपके पास HTML में सादे option टैग में यह विशेषता है लेकिन jsf में नहीं है। मुझे लगता है कि title मान प्राप्त करने के लिए आपको selectOneMenu के बजाय सादे select टैग का उपयोग करना चाहिए।

+1

"आपके पास HTML में सादा विकल्प टैग में यह विशेषता है" - इसकी व्यापक स्वीकृति काफी हाल ही की बात है, यह केवल suppo है जहां तक ​​मैं कह सकता हूं आईई 9 और ऊपर से rted। यदि पहले से कोई नहीं है, तो 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 में दिखाई नहीं देगा जोड़ सकते हैं।

सर्वश्रेष्ठ समाधान प्रत्येक चयनित आइटम के लिए टूलटिप दिखाने के लिए जावास्क्रिप्ट का उपयोग करेगा।

<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

के रूप में अपने उत्पन्न options पर एक title विशेषता उत्पन्न करने के लिए, तो आप बस पासथ्रू इस तरह विशेषताओं का उपयोग कर सकते हैं के लिए काम करेंगे:

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

दुर्भाग्यवश आप ' 'के माध्यम से परिभाषित चर का उपयोग नहीं कर सकते हैं:> लेकिन बासससी [इस उत्तर] में दिखाएं (http://stackoverflow.com/प्रश्न/25511351/कैसे-टू-एड-टूलटिप-टू-फ़ेसलेक्टिटम्स # 25512124) इस सीमा के आसपास 'c: forEach' के माध्यम से कैसे काम करें। –

संबंधित मुद्दे