相关疑难解决方法(0)

什么可以使用<f:metadata>,<f:viewParam>和<f:viewAction>?

任何人都可以澄清我们如何在一般情况下使用,或者在现实世界中使用这个代码片段?

<f:metadata>
    <f:viewParam id="id" value="#{bean.id}" />
    <f:viewAction action="#{bean.init}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

jsf jsf-2 viewparams viewaction

146
推荐指数
1
解决办法
12万
查看次数

何时使用f:viewAction/preRenderView与PostConstruct?

什么时候应该使用f:viewActionor preRenderView事件来初始化页面的数据而不是使用@PostConstruct注释?基于支持bean的范围类型使用一个或另一个的基本原理例如,如果支持bean是@RequestScoped,那么在呈现视图之前选择使用f:viewAction或preRenderView覆盖@PostConstruct初始化支持bean是不相关的,因为两者会结果是一样的吗?

f:viewAction或preRenderView

<f:metadata>
  <f:viewAction action="#{myBean.initialize}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
<f:metadata>
  <f:event type="preRenderView" listener="#{myBean.initialize}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

要么

@PostConstruct

public class MyBean
{
    @PostConstruct
    public void initialize()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

jsf postconstruct jsf-2 prerenderview viewaction

90
推荐指数
1
解决办法
7万
查看次数

如何在JSF中进行重定向

我有一个网络应用程序,用户可以直接发送到某些特定页面(例如他可以查看或编辑项目的页面).为此,我们提供了一个特定的网址.这些网址位于外电流网络的应用程序(即,它们可以存在于另一网络的应用程序,或电子邮件).

网址看起来像http://myserver/my-app/forward.jsf?action=XXX&param=YYY,其中:

  • action表示用户将被重定向的页面.你可以认为这是在from-outcome任何JSF的行动navigation-case中faces-config.xml.
  • actionParam是上一个操作的参数(通常是项ID)

例如,我可以拥有这些网址:

  • http://myserver/my-app/forward.jsf?action=viewItem&actionParam=1234
  • http://myserver/my-app/forward.jsf?action=editItem&actionParam=1234

当然,我有一个Java类(bean),它将检查一些安全性约束(即允许用户查看/编辑相应的项目?),然后将用户重定向到正确的页面(例如edit.xhtml,view.xhtml或access-denied.xhtml).


目前的实施

目前,我们有一个完成前进的基本方法.当用户单击该链接时,将调用以下XHTML页面:

<html>
    <body id="forwardForm">
        <h:inputHidden id="myAction" binding="#{forwardBean.hiddenAction}"/>
        <h:inputHidden id="myParam" binding="#{forwardBean.hiddenActionParam}"/>
        <h:commandButton id="forwardBtn" actionListener="#{forwardBean.doForward}" style="display: none;"/>
    </body>
    <script type="text/javascript">
        document.getElementById('forwardForm:forwardBtn').click();
    </script>
</html>
Run Code Online (Sandbox Code Playgroud)

如您所见,我<h:inputHidden>在Java bean中绑定了两个组件.它们将用于存储both action和actionParamrequest参数(使用FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("actiontParam");)的值.我还提供了doForward在呈现页面时立即调用的方法,该方法将(再次)用户重定向到真实页面.方法是:

public void doForward(ActionEvent evt) {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    String redirect = // define the navigation rule that must be …
Run Code Online (Sandbox Code Playgroud)

java jsf jsf-1.2

30
推荐指数
2
解决办法
13万
查看次数

如何处理数据库中用户的身份验证/授权?

目前,我正在使用JSF 2.0,Tomcat 7和MongoDB开发一个Web项目.我有一个很大的问题,如何处理数据库中用户的会话管理和身份验证/授权.

我想要的结构如下:只有登录用户才能创建事件,每个人都可以看到创建的事件.

  • create.xhtml - >仅适用于已登录的用户.
  • events.xhtml - >为大家公开.

我计划的基本结构是:

  • 检查页面是否需要登录用户(例如create.xhtml)
  • 如果是,请检查用户是否已登录
  • 如果用户未登录,请转到 login.xhtml
  • 如果成功登录,请返回请求的页面
  • 除非用户单击"注销"按钮,否则请保留"用户已登录"信息.(我想@SessionScoped进入比赛)

问题是:

  1. 这种不那么复杂的方法是什么?
  2. 我应该在哪里使用@SessionScoped注释?在Create.java或 LoginManager.java?
  3. 对于我的问题,Spring安全性看起来很复杂,我真的需要它吗?如果是的话,你能解释一下实现如何与JSF 2.0和Mongo DB一起工作吗?

database authentication jsf authorization java-ee

28
推荐指数
1
解决办法
3万
查看次数

fs事件的jsf执行顺序

这些的执行顺序是什么?

这是一个关于可能的f:event事件名称的问题:JSF 2事件列表?

preRenderComponent
preRenderView
postAddToView
preValidate
postValidate
Run Code Online (Sandbox Code Playgroud)

我想检查用户是否保存在会话bean中,如果没有重定向到登录站点,这需要在view-param转换阶段之前发生,因为使用的转换器依赖于登录的用户.'preValidate'似乎是在转换后发生的,因此我需要更早的事件.

<f:event type="preRenderView" listener="#{beanA.checkLoggedIn()}"/>
<f:viewParam name="param" value="#{beanB.param}" converter="#{beanB.converter}" required="true"/>
Run Code Online (Sandbox Code Playgroud)

我也可以在'beanB'中加入'checkLoggedIn()',但是试图使用一个单独的请求范围的bean来进行检查,以便我可以轻松地重用它.

events jsf

17
推荐指数
1
解决办法
3万
查看次数

@PostConstruct中的重定向导致IllegalStateException

我想在我的4个支持bean中的@PostConstruct中进行重定向.正如我从以下问题中学到的: JSF PostConstruct异常处理 - 重定向 我知道我应该使用:

    @PostConstruct
    public void init() {    
       if (shouldRedirect) {
          try { 
             FacesContext.getCurrentInstance().getExternalContext().redirect("bolagsSok_company.xhtml");
             return;
          } catch (IOException e) {
             //do nothing
          }
        }
        ....
     }
Run Code Online (Sandbox Code Playgroud)

这适用于我的2个Backing bean ...但是对于其他两个,非重定向的xhtml文件仍然调用支持bean而不重定向.我已经确认(使用调试),支持bean确实调用了两个FacesContext.getCurrentInstance().getExternalContext().redirect("bolagsSok_company.xhtml");并返回; 声明.

有什么线索可能是错的?

jsf jsf-2

12
推荐指数
1
解决办法
8197
查看次数

当已经过身份验证的用户访问登录页面时,如何重定向到另一个页面

我想知道如果某个c:ifclausule是否可以重定向用户true?

<c:if test="#{loginController.authenticated}">
 //redirect to index page
</c:if>
Run Code Online (Sandbox Code Playgroud)

security authentication redirect servlets jsf-2

6
推荐指数
2
解决办法
4112
查看次数

如何在preRenderView侦听器方法中执行导航

我从什么可以<f:metadata>,<f:viewParam>和<f:viewAction>开始?

我有一个预呈现视图事件监听器:

<f:metadata>
    <f:event type="preRenderView" listener="#{loginBean.performWeakLogin()}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

它调用以下方法:

public String performWeakLogin() {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    String parameter_value = (String) facesContext.getExternalContext().getRequestParameterMap().get("txtName");

    if (parameter_value != null && parameter_value.equalsIgnoreCase("pippo")) {
        try {
            return "mainPortal";
        } catch (IOException ex) {
            return null;
        }
    } else {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

和以下导航规则:

<navigation-rule>
    <from-view-id>/stdPortal/index.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>mainPortal</from-outcome>
        <to-view-id>/stdPortal/stdPages/mainPortal.xhtml</to-view-id>
        <redirect/>
    </navigation-case>
</navigation-rule>
Run Code Online (Sandbox Code Playgroud)

但是,它不执行导航.它使用命令按钮时,如下所示:

<p:commandButton ... action="#{loginBean.performWeakLogin()}"  /> 
Run Code Online (Sandbox Code Playgroud)

navigation listener jsf-2 prerenderview

6
推荐指数
1
解决办法
1万
查看次数

JSF 2:直接调用托管bean

我是JSF的新手(2).

在Struts中,我们可以从URL调用一个动作app.action.这会调用一个动作并返回一个结果页面,比如一个JSP(最初没有JSP/HTML).

如何在JSF中完成同样的事情?(我知道如何从.xhtml调用一个动作)即直接从URL调用托管bean并获取结果页面.

java jsf jsf-2

4
推荐指数
2
解决办法
4015
查看次数

使用PhaseListener而不是Servlet过滤器进行授权的限制

我目前正在使用PhaseListener如下方法来执行用户授权.

private PhaseId phaseId = PhaseId.RESTORE_VIEW;

@Override
public void afterPhase(PhaseEvent event) {

    FacesContext fc = event.getFacesContext();
    boolean isOnAllowedPage = false;
    String[] allowedPages = choseRightPages(); // chose pages for role

    for (String s : allowedPages) {
        if (fc.getViewRoot().getViewId().lastIndexOf(s) > -1) {
            isOnAllowedPage = true;
            break;
        }
    }

    if (!isOnAllowedPage) {
        NavigationHandler nh = fc.getApplication().getNavigationHandler();
        nh.handleNavigation(fc, null, "prohibited");
    }
}
Run Code Online (Sandbox Code Playgroud)

它做我想要的,但我没有看到它列在如何处理数据库中的用户的身份验证/授权?而这个名为"使用phaselistener问题的授权"的Coderanch主题也提到了以下内容:

您不应该将与JSF紧密相关的授权结合在一起.更好地利用容器管理的身份验证和/或作用于覆盖受保护页面的url模式的简单过滤器.

我并不完全理解在执行用户授权时使用a PhaseListener而不是a 的限制Filter.有人可以向我解释一下吗?

jsf authorization jsf-2 servlet-filters phaselistener

3
推荐指数
1
解决办法
1057
查看次数

FacesContext中getExternalContext中的NullpointerException

我尝试从FacesContext获取外部上下文,并获得NullPointerException:

ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
Run Code Online (Sandbox Code Playgroud)

什么可能导致问题?

java jsf

1
推荐指数
1
解决办法
9468
查看次数