当前位置: 首页 > 知识库问答 >
问题:

JSF2.0在页面加载时调用服务器端方法

狄飞鹏
2023-03-14

让我给你一个关于系统如何工作的想法。

我使用JAAS登录模块进行登录和角色管理。我可以根据我的角色访问特定页面。

我在地址栏中输入我的url,点击回车键。

登录页面出现,正确登录后,它会将我重定向到正确的页面(现在我们称之为page1.jsf)。

我想在页面加载时调用服务器端方法。

你能帮我吗?

**编辑**

假设我必须访问第1页。jsf,仅角色1可访问。

在地址栏中,我输入http://localhost:8080/myapp/page1.jsf

JAAS显示登录页面,正确输入凭证后,我被重定向到第1页。jsf

第一页。jsf被请求或在页面加载时,我想从我的类中调用一个服务器端方法来重新加载page1。jsf

共有2个答案

戚建白
2023-03-14

是的,这很有效。您也可以访问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
    }

}

然后在网上创建一个新条目。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>

之后,您应该能够调用localhost:8080/TestServlet,然后调用您的方法。

子车才捷
2023-03-14

如果您使用的是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>

您可以添加一个包含角色的属性,并在PermissionManager.checkRoles()中执行重定向到corret页面。

@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) {
        ...
    }

   }

}

看看这个例子,看看这个相关的问题

 类似资料:
  • PrimeFaces 5.0、JSF 2.2、Glassfish 4.1.1、, 我假设我的设置中有些东西没有正确配置,但我不确定该看什么。。。 所以我使用managedbeans来支持JSF页面。在页面上的PrimeFace元素中,如果我使用oncomplete属性,它引用的方法将在页面加载时被调用。我不想让它在每次加载页面时调用这个方法,我也不认为应该这样! 我已经在几页和不同的元素中对此进行

  • 我想在加载aboutme时调用servlet GetUserData。jsp页面。 基本上,它所做的是设置一个会话变量,允许用户查看其配置文件信息。 它设置了一个会话变量,因此它不需要调用任何东西,只需在页面加载时继续使用servlet。 这个servlet调用另一种方法来生成SQL语句并准备要发送的数据。 最后,在JSP页面上,我想使用先前声明的会话变量将所有信息(如登录名、密码等)打印到表中。

  • 问题内容: 我正在将React与Firebase一起使用来开发一个小型Web应用程序。为了进行身份验证,我使用了上下文API,并且在上下文中添加了登录用户的详细信息。 AuthProvider.tsx AuthConsumer.tsx PrivateRoute.tsx App.tsx 用户已经登录,并且会话持久性设置为本地。问题是,当我尝试本地主机/订阅(这是一条私有路由)时,context.is

  • 我试图从一个网页中以乐透模拟机的形式接收一组数字。我运行服务器,通过浏览器中的本地主机打开页面,输入数字并提交,但下一页上没有显示任何内容,甚至没有404错误。可能是地图问题,但我迷路了。有什么想法吗? 我otto.class 指数html 网状物xml 这三个文件具有以下目录: 大乐透WEB-Lotto\WEB-classes\tomcat.5\webcat.5。班 index.htmlZ:\a

  • 我使用python编写了一个简单的超文本传输协议Web服务器,但我注意到当我连接到它时,html页面出现在浏览器窗口中,但chrome选项卡中的指示器继续旋转,服务器收到空字符串。这种情况一直持续到我单击“X”停止加载页面。有人能解释为什么会发生这种情况以及如何解决这个问题吗?此外,如果超文本传输协议标头错误或我错过了重要的标头,请告诉我。我发现很难找到有关超文本传输协议标头和命令的信息。 您可以

  • 是否有一种方法可以在webview上加载html页面而不使用web服务器? 在我的android应用程序中,我有一个web服务器,因为用户可以保存他想要的网页,然后可以脱机访问它们。 url可以是: http://stackoverflow.com 或