您不能直接在 JSF 中调用方法或创建变量,因此您不需要导入。
唯一的方法是使用 EL-Expressions。
由于 EL 无法调用静态方法,因此您必须自己创建一个 Bean,以便调用 KeycloakUriBuilder.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;
}
}
<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 的字段,则在页面上显示 Something 的首选方式是使用 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 有一个 Scope,这个带有 RequestScoped 的示例应该很好地匹配 <%@ page session="false" %> - 一个 Request Scoped Bean 仅适用于一个请求,之后 Bean 被释放。还有许多其他范围,例如@SessionScoped(来自 javax.enterprise.context)表示只要 Session 处于活动状态,Bean 就会一直存在。
正如另一位用户所提到的,这些范围存在于 CDI 变体(包javax.enterprise.context)和 JSF 变体(包javax.faces.bean)中。您应该使用 CDI-Variant,因为 JSF-Variant 可能很快就会被弃用(请参阅 here)。
作用域的解释见here。