2016-01-21 55 views
1

我需要將JSP文件轉換爲等效的JSF文件。的JSP如下:JSF中JSP scriptlet方法的等價調用

步驟1:類導入:

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

步驟2:定義一個變量:

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

步驟3:然後是指該變量:

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

導入的庫是項目中的外部庫。在JSF中,我知道如何執行第3步。但是我不知道如何在第1步中導入類以及如何在JSF中的第2步中定義變量。

在JSF中是否有執行步驟1-3的等效方法?謝謝。

回答

1

您不能直接在JSF中調用Methods或創建變量,因此您不需要導入。 唯一的方法是使用EL表達式。 由於調用靜態方法是不可能的EL,你必須自己創建一個Bean,使的KeycloakUriBuilder.fromUri... 調用一個叫豆你調用它的方法:

例子:

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> 

會給你這個HTML:

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

顯示頁面上的某些內容的首選方式是使用getter和setter,如果你有一個字段的getter和setter

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

你可以使用

#{myBean.name} 

JSF將調用的getter如果它需要值(用於輸出)或調用Setter(如果有值設置)(來自輸入字段)

<%@ page session="false" %>也不是必需的也是不可能的。 在JSF中Bean有一個範圍,這個例子的RequestScoped應該是<%@ page session="false" %>的一個很好的匹配 - 一個請求作用域Bean只爲一個請求生存,然後Bean被處置。還有許多其他示波器,例如@SessionScoped(來自javax.enterprise.context),只要會話處於活動狀態,就會生活一次。

正如其他用戶所述,這些範圍存在於CDI變體(包javax.enterprise.context)和JSF變體(包javax.faces.bean)中。您應該使用CDI Variant,因爲JSF Variant可能會很快被棄用(請參閱here)。

示波器的說明參見here

+0

@hinneLins,明白了。那麼JSP中的「<%@ page session =」false「%>」呢?如何在JSF中實現這一點? – user697911

+0

我更新了答案 – hinneLinks

+0

請在新問題中提出新問題。 – BalusC