[JAVA] Échec de l'écriture de l'expression EL dans l'attribut onclick de la balise h: button

--Environnement - 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

Événement: lorsque la page est affichée, l'état HTTPS est 500.

Journal de la console Eclipse


2020-08-10T15:17:17.299+0900|avertissement: StandardWrapperValve[Faces Servlet]: Servlet.service() for servlet Faces Servlet threw exception
javax.faces.application.ViewExpiredException: viewId:/base.jsf -Vue/base.Impossible de restaurer jsf.
    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)
...réduction...

Cause: Parce que l'expression EL est écrite dans l'attribut onclick de la balise h: button

base.xml


...réduction...
<h:button value="télécharger" onclick="#{uploadBean.onClick}"/>
...réduction...

UploadBean.java


...réduction...
/**
 *Obtenir le code JavaScript à afficher pour l'attribut onClick.
 * @retourner le code JavaScript.
 */
public String getOnClick() {
    StringBuilder builder = new StringBuilder();
    builder.append("window.open('upload.jsf");
    // ...réduction...
    return builder.toString();
}
...réduction...

Je ne sais pas pourquoi écrire une expression EL ne fonctionne pas ... Est-ce parce que je ne suis pas sûr de ce que dit la documentation? Je veux que quelqu'un l'explique d'une manière facile à comprendre ...

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)

(Traduction approximative) L'URL cible doit être gérée par un appel à la méthode encodeResourceURL de ExternalContext. Le nom du paramètre UIP est affiché à gauche et la valeur du paramètre UIP est affichée à droite. Le nom et la valeur doivent être encodés URLE. Chaque instance de UIParameter est séparée par une esperluette conformément aux instructions de la spécification d'URL. Le résultat codé final sera écrit dans l'attribut onclick du bouton sous la forme "window.location.href = ''". Si le développeur spécifie onlclick, la paire nom / valeur pour window.location.href sera ajoutée à la fin du script.

Correspondance: Changer pour type = "bouton" de la balise d'entrée

base.xml


...réduction...
<input type="button" value="télécharger" onclick="#{uploadBean.onClick}" />
...réduction...

Question: Parfois, l'écriture d'une expression EL dans l'attribut onclick de la balise h: button fonctionne.

upload.xml


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

UploadBean.java


...réduction...
    public String getKey() {
        return "formId:file";
    }
...réduction...

production


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

Recommended Posts

Échec de l'écriture de l'expression EL dans l'attribut onclick de la balise h: button
Est-il courant de ne pas écrire la balise de fermeture de la balise <P> dans Javadoc?
Je veux changer la valeur de l'attribut dans Selenium of Ruby