2009-08-27 7 views
0

Par défaut, JSF affiche dynamiquement le nom d'ID du champ HTML. Le nom de l'ID est généré de manière aléatoire au format formname: id_some_random_number. Pour cette raison, je ne peux pas utiliser document.getElementById (""). Pour cela, je ne peux pas utiliser document.getElementById ("").Accès aux valeurs de champ html dans l'infrastructure JSF

Y at-il une solution à ce problème?

Répondre

1

Vous pouvez obtenir l'ID généré à l'aide UIComponent.getClientId (JSF 2, si vous pouvez l'utiliser, ajoute un non-arg version qui rend cela plus utile avec les expressions EL). Voir this blog post pour obtenir des conseils sur l'utilisation des identificateurs de composants JSF (bien noter les mises en garde).

2

Vous avez juste besoin de spécifier l'ID de l'entrée. Cependant, notez que l'ID sera préfixé par l'ID du formulaire qui contient le champ de saisie.

Par exemple:

<h:form id="myForm"> 
    ... 
    <h:inputText id="myInput" .../> 

l'ID réel du inputText est myForm: myInput.

Ainsi, ce code Javascript fonctionnera:

var obj = document.getElementById("myForm:myInput"); 


Modifier (précision)

Pour être plus précis, si un composant implémente l'interface NamingContainer en Java, tous les Les composants imbriqués auront leur identifiant préfixé par l'ID de ce composant. C'est le cas pour le composant <h:form/>, mais également pour <h:datatable/>.

+0

Oui, c'est comme ça que ça fonctionne mais dans certains cas, comme si nous incorporions le composant dans un autre composant, alors l'identifiant généré n'est pas prévisible. – Madhu

+0

Pourriez-vous éditer votre publication originale pour donner un exemple d'un tel cas? – romaintaz

+0

Cela fonctionne dans mes applications. Je n'aime pas l'utiliser, comme si vous changez l'un de vos identifiants de composants ou les mettez sous une forme différente, votre javascript cessera de fonctionner. –

2

Si tout le reste échoue, vous pouvez essayer de donner aux éléments des classes css uniques, puis de les accéder via getElementsByClassName(). Ou essayez de parcourir les childNodes() d'un élément avec un identifiant connu. Vous pouvez également ajouter un nœud avec identifiant connu l'intérieur votre élément cible puis utilisez .parentNode :)

+0

Cela semble être une solution vraiment compliquée ... Pourquoi utiliser simplement l'attribut "id"? – romaintaz

+0

Comme le dit l'affiche, il ne peut pas utiliser id, car il est généré au hasard. – n1313

+0

Il est généré de manière aléatoire, sauf si vous définissez vous-même l'attribut "id" ... – romaintaz