Redirection vers une URL externe dans un nouvel onglet et l'exécution d'une action dans la sauvegarde de haricot en même temps
Je travaille dans une application jsf qui, à un certain temps pour ouvrir une page externe dans un nouvel onglet, laissant la première page active. J'ai besoin de trouver un moyen de faire la demande d'effectuer, en un seul clic de bouton:
- une redirection vers une URL externe dans un nouvel onglet
- une action qui désactive le bouton dans la page d'origine
J'ai essayé d'utiliser un <outputLink />
mais il n'a pas d'attribut action.
J'ai essayé d'utiliser un <commandLink />
mais c'est pas en mesure de rediriger l'extérieur.
J'ai aussi essayé un <commandLink />
avec target="_blank"
et une redirection codé dans le backing bean:
<h:commandLink onclick="submit();" target="_blank" action="#{myBean.execute}" disabled="#{myBean.linkDisabled}" value="external link" />
et, dans le backing bean:
public String execute() {
linkDisabled = true;
try{
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
externalContext.redirect(Constants.EXTERNAL_URL);
} catch(Exception e){
throw new FacesException("Redirection failed");
}
return THIS_PAGE;
}
Une page est ouverte dans un nouvel onglet, mais c'est la page en cours, au lieu de le que avec l'URL Constants.EXTERNAL_URL
et le bouton est toujours activé. Aucun message d'erreur n'est affiché. Toute suggestion?
Merci d'avance, Andrea
OriginalL'auteur avalori | 2012-04-17
Vous devez vous connecter pour publier un commentaire.
Votre question est source de confusion. Vous êtes de mélange "lien" et "bouton". En gros, vous avez besoin de désactiver l'élément dans le côté client en JavaScript parce que la réponse ne permet pas de revenir à la fenêtre du navigateur/onglet, mais d'un autre navigateur de la fenêtre/onglet. En JavaScript, il est facile de désactiver un bouton, mais pas un lien. Pour des raisons de simplicité, je vais supposer que tu veux dire et peut utiliser une
<h:commandButton>
et que c'est le seul bouton dans la forme actuelle.Pour résoudre votre problème, vous devez supprimer
onclick="submit()"
(parce que c'est perturbant le comportement par défaut) et vous avez besoin de retirer la navigation sur le résultat (il ne devrait pas d'importance, mais on ne sait jamais, dans certains JSF impls) et vous avez besoin de désactiver le bouton de JS dans le côté client.Avec toute votre code devrait ressembler à ceci:
Et
La
setTimeout()
est nécessaire parce que le bouton est désactivé avant que les données du formulaire est envoyé, ce qui entraînerait que le bouton est propre paire nom=valeur ne sera pas envoyé en tant que paramètre de la requête, et ainsi de JSF ne pas invoquer une quelconque action.<h:commandButton>
n'a pas l'attributtarget
, afin que le compilateur va dans l'erreur. Je suis en utilisant JSF 1.1Ah oui, oublié que peu. Si le bouton est le seul bouton dans le formulaire, puis vous pouvez simplement mettre cet attribut dans le
<h:form>
à la place.Merci BalusC!
OriginalL'auteur BalusC
pourquoi n'utilisez-vous pas action="uneaction" et la carte en faces-config.xml pour aller à une autre page?
Est-il possible de rediriger vers la page externe de navigation à l'aide de la règle?
OriginalL'auteur Ilya Sidorovich