2016-01-21 4 views
1

Je dois convertir un fichier JSP en un fichier JSF équivalent. Le JSP est la suivante:Equivalent de l'appel de la méthode scriptlet JSP dans JSF

Étape 1: Classe d'importation:

<%@ page import="org.keycloak.constants.ServiceUrlConstants" %> 
<%@ page import="org.keycloak.common.util.KeycloakUriBuilder" %> 
<%@ page session="false" %> 
<html> 

Étape 2: Définir une variable:

<% 
     String logoutUri = KeycloakUriBuilder.fromUri("/auth").path(ServiceUrlConstants.TOKEN_SERVICE_LOGOUT_PATH).queryParam("redirect_uri", "/customer-portal").build("demo").toString(); %> 

Etape 3: Ensuite, cette variable:

<a href="<%=logoutUri%>">logout</a> 

La bibliothèque importée est une bibliothèque externe dans le projet. En JSF, je sais comment faire l'étape 3. Mais je ne sais pas comment importer les classes à l'étape 1 et comment définir une variable comme indiqué dans l'étape 2 de JSF.

Existe-t-il une manière équivalente d'effectuer les étapes 1 à 3 dans JSF? Je vous remercie.

Répondre

1

Vous ne pouvez pas appeler les méthodes directement dans JSF ou créer des variables, vous n'avez donc pas besoin d'importations. La seule façon est d'utiliser EL-Expressions. Depuis l'appel de méthodes statiques est impossible avec EL, vous devez vous créer un Bean, qui fait l'appel de KeycloakUriBuilder.fromUri... Avec un nommé Bean vous appelez ses méthodes:

Exemple:

import java.io.Serializable; 
import javax.enterprise.context.RequestScoped; 
import javax.inject.Named; 
//This Bean is available by default under the Name 'myBean', you can change it in the @Named Annotation if desired 
@Named 
@RequestScoped 
public class MyBean implements Serializable { 

    public String myMethod(String inupt){ 
     return "Hello " + input; 
    } 
} 

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" 
    xmlns:f="http://java.sun.com/jsf/core" > 
<head></head> 
<body> 
<h:outputText value ="#{myBean.myMethod('world')}"/> 
</body> 
</html> 

vous donnera ce HTML:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head></head> 
<body>Hello world 
</body> 
</html> 

La meilleure façon de montrer quelque chose sur la page est d'utiliser des accesseurs, si vous avez un champ avec getter et setter

private String name; 
public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 

Vous pouvez simplement utiliser

#{myBean.name} 

JSF appellera le getter si elle a besoin de la valeur (pour la sortie) ou appelez le Setter s'il y a une valeur à définir (à partir des champs d'entrée)

Le <%@ page session="false" %> n'est également ni nécessaire ni possible. Dans JSF, le Bean a une portée, cet exemple avec RequestScoped devrait être un bon match pour <%@ page session="false" %> - un bean Scoped demande vie seulement pour une demande, après que le haricot est disposé. Il existe de nombreux autres champs d'application, par ex. @SessionScoped (à partir de javax.enterprise.context) pour un bean qui reste actif tant que la session est active.

Comme mentionné par un autre utilisateur, ceux Scopes existe dans le CDI-Variant (Paquet javax.enterprise.context) et une variante JSF (paquet javax.faces.bean). Vous devriez utiliser le CDI-Variant, car le JSF-Variant pourrait être bientôt déprécié (voir here).

Explication des étendues voir here.

+0

@hinneLins, J'ai compris. Alors qu'en est-il de la "<% @ page session =" false "%>" dans JSP? Comment réaliser ceci dans JSF? – user697911

+0

J'ai mis à jour la réponse – hinneLinks

+0

Veuillez poser de nouvelles questions dans les nouvelles questions. – BalusC