tag.put("id", this.getId());
est pas la façon de le faire en guichet.
à la place, utilisez
component.setOutputMarkupId(true)
(soit dans votre constructeur du composant ou dans votre méthode de liaison de comportement()) pour faire wicket écrire l'identifiant, et si vous avez absolument besoin de contrôler ce que l'id est (ce qui est presque jamais le cas), vous pouvez faire
component.setMarkupId("myId")
aussi, vous ne devriez probablement pas affecter la valeur tag vous, utilisez un modèle (la manipulation du modèle est extrêmement intelligent dans wicket, lisez more about models). Il existe des utilisations valides pour onComponentTag, mais elles sont bien au-delà de ce que vous faites. Laissez guichet faire ce que le guichet fait le mieux et tout ira bien.
EDIT: OK, un peu plus de clarification
jeter un oeil à the source code of AjaxFormComponentUpdatingBehavior, en particulier la partie où le gestionnaire d'événements javascript est généré. Comme vous pouvez le voir, wicket utilise getMarkupId() pour déterminer l'identifiant réel. L'identifiant que vous définissez en utilisant tag.put (id) est totalement inconnu de wicket et par conséquent le comportement ne peut pas fonctionner.
La chose standard à faire est setOutputMarkupId (true). C'est la seule façon de dire à wicket de rendre l'id (autre que setOutputMarkupPlaceholder (true), qui appelle en interne l'ancienne méthode). De cette façon, vous vous assurez que les écritures d'ID Wicket est l'ID Wicket connaît. Si cela ne rend pas l'identifiant, vous écrasez probablement un comportement par défaut en écrasant onComponentTag.
Jetez un oeil à the source code of Component, en particulier à onComponentTag(), la méthode prépondérants:
protected void onComponentTag(final ComponentTag tag) {
// if(setOutputMarkupId(true) was set)
if (getFlag(FLAG_OUTPUT_MARKUP_ID)) {
// set id attribute
tag.put(MARKUP_ID_ATTR_NAME, getMarkupId());
}
}
[Les commentaires sont à moi. BTW, c'est la source d'une ancienne version, mais je n'ai trouvé aucune source actuelle en ligne, et la fonctionnalité n'a pas changé.]
Maintenant si, comme dans votre cas, vous voulez définir l'identifiant du composant manuellement, vous devez utiliser
component.setMarkupId("myId")
et bien sûr
setOutputMarkupId(true)
ainsi. Si cela ne fonctionne pas, rendez-vous sur le site de wicket JIRA et déposez un bug. Mais j'en doute, c'est une fonctionnalité standard qui fonctionne pour des milliers d'utilisateurs.
vous avez oublié setOutputMarkupId (true) :-) –
Voir la source de AbstractDefaultAjaxBehavior.onBind() - le comportement définit le drapeau pour vous (désolé, ce n'était pas clair - J'ai édité ma réponse pour la rendre plus claire). – ireddick