Umleitung auf eine externe URL in einem neuen tab und Durchführung einer Aktion in der backing-bean zur gleichen Zeit
Arbeite ich an einer jsf-Anwendung, die zu einer bestimmten Zeit öffnen müssen, um eine externe Seite in einem neuen tab, das verlassen der ersten Seite aktiv. Ich muss einen Weg finden, um die Anwendung durchzuführen, in einem einzelnen button-Klick:
- eine Weiterleitung auf eine externe URL in einem neuen tab
- eine Aktion deaktiviert, die Schaltfläche selbst in der ursprünglichen Seite
Habe ich versucht mit einem <outputLink />
aber es hat kein action-Attribut.
Ich habe versucht, mit einer <commandLink />
aber es ist keine Umleitung außerhalb.
Ich habe auch versucht ein <commandLink />
mit target="_blank"
und eine Umleitung codiert in der backing-bean:
<h:commandLink onclick="submit();" target="_blank" action="#{myBean.execute}" disabled="#{myBean.linkDisabled}" value="external link" />
und in der 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;
}
Einer Seite in einem neuen tab geöffnet, aber es ist der aktuellen Seite statt der URL Constants.EXTERNAL_URL
und der button ist immer noch aktiviert. Wird keine Fehlermeldung angezeigt. Jede Anregung?
Vielen Dank im Voraus, Andrea
InformationsquelleAutor avalori | 2012-04-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Frage ist verwirrend. Sie mischen "link" und "button". Im Grunde müssen Sie deaktivieren Sie das element in der client-Seite durch JavaScript, weil die Antwort nicht wieder in das aktuelle browser-Fenster/tab, sondern zu einer anderen browser-Fenster/tab. In JavaScript ist es einfach zu deaktivieren einer Schaltfläche, aber nicht ein link. Der Einfachheit halber, ich nehme an, du meinst eine
<h:commandButton>
und dies ist die einzige Taste, die in der aktuellen form.Um Ihr problem zu lösen, müssen Sie entfernen
onclick="submit()"
(weil es störend das default-Verhalten), und Sie müssen entfernen Sie die Navigations-Ergebnis (sollte es egal sein, aber man weiß nie, in einige JSF-impls) und Sie müssen die Schaltfläche deaktivieren von JS im client-Seite.Alles Ihr code sollte so Aussehen wie diese:
Und
Den
setTimeout()
ist notwendig, weil der button ist sonst deaktiviert, bevor die Formulardaten gesendet werden, die bewirken würde, dass die Schaltfläche den eigenen name=Wert-paar wird nicht gesendet werden als request-parameter und damit JSF nicht aufrufen Aktion.<h:commandButton>
nicht das Attributtarget
, so dass die Seite compiler geht in Fehler. Ich bin mit JSF 1.1Oh stimmt, übersehen, dass die bit. Wenn der button ist die einzige Taste in die form, dann können Sie nur das Attribut in der
<h:form>
statt.Danke BalusC!
InformationsquelleAutor BalusC
warum kommst du nicht mit action="someaction", und ordnen Sie Sie in faces-config.xml gehen Sie zu einer anderen Seite?
Gibt es eine Möglichkeit zur Weiterleitung auf externe Seite mit der navigation Regel?
InformationsquelleAutor Ilya Sidorovich