2012-03-21 12 views

Respuesta

5

No tengo una solución elegante, pero se puede hacer. Estoy asumiendo JSF 2+ & Facelets VDL.

Para un bean gestionado 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; 
    } 
} 

Se puede utilizar JavaScript para establecer el atributo title en el nodo DOM:

<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

Creo que para la etiqueta f:selectItems no existe ningún atributo (title) disponible. Tiene este atributo en la etiqueta simple option en HTML pero no en jsf. Creo que deberías usar la etiqueta simple select en lugar de selectOneMenu para obtener el valor title.

+1

"Usted tiene este atributo en la etiqueta de opción simple en HTML" - su adopción generalizada es bastante reciente, sin embargo, solo está suppo desde IE9 y hasta donde puedo decir. Si aún no hay uno, una solicitud de función en JSF jira en javaserverfaces.java.net probablemente no sea algo malo. – Gimby

0

Suponga que su <h:selectOneMenu es como sigue.

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

Ahora en window.onload Se puede recorrer option s y añadir la title como a continuación

<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

atributo ITEMDESCRIPTION no aparecerá en la costura 2.2.

La mejor solución sería usar javascript para mostrar información sobre herramientas para cada elemento seleccionado.

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

si su ID se genera de forma dinámica o de otra manera, por ejemplo.

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

Esta solución funciona para todos de identificador generado dinámicamente, así como fácil

1

Para generar un atributo title en su generada options, puede simplemente usar pasarela atributos como esto:

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

Desafortunadamente no puede usar la variable definida mediante '' dentro del atributo passthrough :(. Pero BalusC aparece en [esta respuesta] (http://stackoverflow.com/questions/25511351/how-to-add-tooltip-to-fselectitems # 25512124) cómo evitar esta limitación mediante 'c: forEach'. –

Cuestiones relacionadas