[JAVA] Fehler beim Schreiben des EL-Ausdrucks im onclick-Attribut des h: button-Tags

--Umgebung - CentOS Linux release 7.8.2003 (Core) - Eclipse IDE for Enterprise Java Developers.Version: 2020-03 (4.15.0) - openjdk version "11.0.7" 2020-04-14 LTS - JSF 2.3.9

Ereignis: Wenn die Seite angezeigt wird, lautet der HTTPS-Status 500.

Eclipse-Konsolenprotokoll


2020-08-10T15:17:17.299+0900|Warnung: StandardWrapperValve[Faces Servlet]: Servlet.service() for servlet Faces Servlet threw exception
javax.faces.application.ViewExpiredException: viewId:/base.jsf -Aussicht/base.Jsf konnte nicht wiederhergestellt werden.
    at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:194)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:76)
    at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:109)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:177)
    at javax.faces.webapp.FacesServlet.executeLifecyle(FacesServlet.java:707)
...Kürzung...

Ursache: Da der EL-Ausdruck im onclick-Attribut des h: button-Tags geschrieben ist

base.xml


...Kürzung...
<h:button value="hochladen" onclick="#{uploadBean.onClick}"/>
...Kürzung...

UploadBean.java


...Kürzung...
/**
 *Rufen Sie den JavaScript-Code ab, der für das onClick-Attribut ausgegeben werden soll.
 * @JavaScript-Code zurückgeben.
 */
public String getOnClick() {
    StringBuilder builder = new StringBuilder();
    builder.append("window.open('upload.jsf");
    // ...Kürzung...
    return builder.toString();
}
...Kürzung...

Ich bin mir nicht sicher, warum das Schreiben eines EL-Ausdrucks nicht funktioniert ... Liegt es daran, dass ich nicht sicher bin, was in der Dokumentation steht? Ich möchte, dass jemand es auf leicht verständliche Weise erklärt ...

The entire target URL string must be processed by a call to the encodeResourceURL() method of the ExternalContext. The name of the UIParameter goes on the left hand side, and the value of the UIParameter on the right hand side. The name and the value must be URLEncoded. Each UIParameter instance is separeted by an ampersand, as dictated in the URL spec. The final encoded result will be written out to the onclick attribute of the button as "window.location.href = ''". If the developer has specified a custom onlclick the window.location.href name/value pair will be appended at the end of the developer specified script. button(JSF 2.1 View Declaration Language: Facelets Variant)

(Grobe Übersetzung) Die Ziel-URL muss durch einen Aufruf der encodeResourceURL-Methode von ExternalContext verarbeitet werden. Der Name des UIParameters wird links und der Wert des UIParameters rechts angezeigt. Der Name und der Wert müssen URLE-codiert sein. Jede UIParameter-Instanz wird gemäß den Anweisungen in der URL-Spezifikation durch ein kaufmännisches Und getrennt. Das endgültige codierte Ergebnis wird als "window.location.href = ''" in das onclick-Attribut der Schaltfläche geschrieben. Wenn der Entwickler onlclick angibt, wird das Name / Wert-Paar für window.location.href am Ende des Skripts hinzugefügt.

Korrespondenz: Wechseln Sie zu type = "button" des Eingabe-Tags

base.xml


...Kürzung...
<input type="button" value="hochladen" onclick="#{uploadBean.onClick}" />
...Kürzung...

Frage: Manchmal funktioniert es gut, einen EL-Ausdruck in das onclick-Attribut des h: button-Tags zu schreiben

upload.xml


<h:button value="OK" onclick="submit('#{uploadBean.key}');" />

UploadBean.java


...Kürzung...
    public String getKey() {
        return "formId:file";
    }
...Kürzung...

Ausgabe


<input type="button" onclick="submit('formId:file');window.location.href='/tryJsf/upload.jsf'; return false;" value="OK">

Recommended Posts

Fehler beim Schreiben des EL-Ausdrucks im onclick-Attribut des h: button-Tags
Ist es Mainstream, das schließende Tag des <P> -Tags nicht in Javadoc zu schreiben?
Ich möchte den Wert von Attribute in Selenium of Ruby ändern