Java JSF2.0在页面加载时调用服务器端方法
让我来告诉你这个系统是如何工作的 我使用JAAS登录模块进行登录和角色管理。根据我的角色,我可以访问特定页面 我在地址栏中键入我的url,然后按enter键 登录页面出现,在正确登录之后,它会将我重定向到正确的页面(现在我们称之为page1.jsf) 我想在页面加载时调用服务器端方法 你能帮我吗 **编辑** 假设我必须访问page1.jsf,它只能访问role1 在地址栏中,我键入 JAAS显示登录页面,正确输入凭证后,我被重定向到page1.jsfJava JSF2.0在页面加载时调用服务器端方法,java,jsf-2,Java,Jsf 2,让我来告诉你这个系统是如何工作的 我使用JAAS登录模块进行登录和角色管理。根据我的角色,我可以访问特定页面 我在地址栏中键入我的url,然后按enter键 登录页面出现,在正确登录之后,它会将我重定向到正确的页面(现在我们称之为page1.jsf) 我想在页面加载时调用服务器端方法 你能帮我吗 **编辑** 假设我必须访问page1.jsf,它只能访问role1 在地址栏中,我键入 JAAS显示登录页面,正确输入凭证后,我被重定向到page1.jsf 一旦请求page1.jsf或页面加载,我想
一旦请求page1.jsf或页面加载,我想从我的类中调用一个服务器端方法来重新加载page1.jsf。您还可以访问servlet,而不是访问jsp或jsf页面。因此,创建一个新的servlet。例如:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class TestServlet
*/
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public static void yourMethod() {
// do something useful
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
yourMethod();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
然后在web.xml文件中创建一个新条目,以便将Servlet映射到/
<servlet>
<display-name>TestServlet</display-name>
<servlet-name>TestServlet</servlet-name>
<servlet-class>your.packages.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
TestServlet
TestServlet
您的.packages.TestServlet
TestServlet
/TestServlet
在此之后,您应该能够调用
localhost:8080/TestServlet
,然后调用您的方法。如果您使用的是JSF 2,您可以使用上面的页面片段:
<html xmlns="http://www.w3.org/1999/xhtml"
... >
<f:view contentType="text/html">
<f:event type="preRenderView" listener="#{permissionManager.checkRoles}" />
<f:attribute name="roles" value="ROLE" />
...
</f:view>
</html>
看看这个
看看这个不使用servlet。我只想在页面被请求/加载时立即调用我的服务器端方法。请参阅此@mattchandy。您能提供有关AjaxBehaviorEvent的更多信息吗?我必须重新加载我的页面几种类型,才能看到所有应该显示的内容。这里不需要这些。也许您需要使用属性
update=“@all”
@MattHandy update attribute not found抱歉,普通的jsf ajax属性正确命名为render
,而不是update
@sameer。您到底遇到了什么问题?是的,但它不起作用。。它没有调用预渲染视图。您可以尝试在`没有任何内容时,在viewparam中放置什么?@sameer,因为您已经对资源进行了保护和正确身份验证。无需再次检查角色。只需简单地添加并在managedBean中尝试这个公共void someMethod(ComponentSystemEvent){System.out.println(“调用的preRenderView”);}
@Named
@ApplicationScoped
class PermissionManager {
...
public void checkRoles(ComponentSystemEvent event) {
String acl = "" + event.getComponent().getAttributes().get("roles");
//Check user role
...
//Redirect if required
try {
ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) context
.getApplication().getNavigationHandler();
handler.performNavigation("access-denied");
} catch (Exception e) {
...
}
}
}