JSF中JSP scriptlet方法调用的等价物
我需要将JSP文件转换为等效的JSF文件。JSP如下所示: 步骤1:类导入:JSF中JSP scriptlet方法调用的等价物,jsf,jsf-2,facelets,scriptlet,Jsf,Jsf 2,Facelets,Scriptlet,我需要将JSP文件转换为等效的JSF文件。JSP如下所示: 步骤1:类导入: <%@ page import="org.keycloak.constants.ServiceUrlConstants" %> <%@ page import="org.keycloak.common.util.KeycloakUriBuilder" %> <%@ page session="false" %> <html> 步骤2:定义一个变量: <%
<%@ 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(); %>
<a href="<%=logoutUri%>">logout</a>
步骤3:然后引用此变量:
<%
String logoutUri = KeycloakUriBuilder.fromUri("/auth").path(ServiceUrlConstants.TOKEN_SERVICE_LOGOUT_PATH).queryParam("redirect_uri", "/customer-portal").build("demo").toString(); %>
<a href="<%=logoutUri%>">logout</a>
导入的库是项目中的外部库。在JSF中,我知道如何执行步骤3。但我不知道如何导入步骤1中的类,以及如何定义JSF中步骤2所示的变量
在JSF中有没有一种执行步骤1-3的等效方法?谢谢。您不能在JSF中直接调用方法或创建变量,因此不需要导入。 唯一的方法是使用EL表达式。 由于使用EL不可能调用静态方法,因此您必须自己创建一个Bean,以便调用
keydavepuribuilder.fromUri…
使用命名Bean可以调用其方法:
例如:
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;
}
}
你可以用
#{myBean.name}
如果需要值(用于输出),JSF将调用getter;如果需要设置值(来自输入字段),JSF将调用Setter
也不需要,也不可能。
在JSF中,Bean有一个作用域,这个带有RequestScoped
的示例应该很好地匹配
——一个请求作用域Bean只对一个请求有效,之后Bean被释放。对于会话处于活动状态的Bean,还有许多其他作用域,例如@SessionScoped
(来自javax.enterprise.context
)
正如另一位用户所提到的,这些作用域存在于CDI变体(Packagejavax.enterprise.context
)和JSF变体(Packagejavax.faces.bean
)中。您应该使用CDI变体,因为JSF变体可能很快就会被弃用(请参阅)
范围说明请参见。@hinneLins,明白了。那么JSP中的“”呢?如何在JSF中实现这一点?请在新问题中提出新问题。太好了。谢谢你的信息。
#{myBean.name}