Java 按URL输入页面后未调用控制器

Java 按URL输入页面后未调用控制器,java,jsf,cdi,postconstruct,Java,Jsf,Cdi,Postconstruct,我有这个网址:https://localhost:8181/Platform2/faces/admin/applicationDetails.xhtml?applicantid=16&applicationid=5 当我在浏览器上介绍这个时,我必须登录才能看到这个页面的内容。它应该显示申请人和应用程序的详细信息(申请人和应用程序是我的WebMaven项目的实体)。问题是,当我这样做时,页面不会检索任何内容。当我再次输入URL时,将显示所需的内容。我的JSF网页是: <?xml versio

我有这个网址:
https://localhost:8181/Platform2/faces/admin/applicationDetails.xhtml?applicantid=16&applicationid=5

当我在浏览器上介绍这个时,我必须登录才能看到这个页面的内容。它应该显示申请人和应用程序的详细信息(申请人和应用程序是我的WebMaven项目的实体)。问题是,当我这样做时,页面不会检索任何内容。当我再次输入URL时,将显示所需的内容。我的JSF网页是:

<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui">
    <body>
        <ui:composition template="./mainadmin.xhtml"> 
            <ui:define name="content">

                <h:form> 

                    <h2 >Application details of #{applicationDetailsRequestBB.applicant.username}</h2>
                    <h:panelGrid columns="2"  >
                        <h:outputText value="First Name" />
                        <h:outputText value="#{applicationDetailsRequestBB.applicant.firstName}" />

                        <h:outputText value="Last Name:" />
                        <h:outputText value="#{applicationDetailsRequestBB.applicant.lastName}" />

                        <h:outputText value="CV" />
                        <h:link outcome="#{applicationDetailsRequestBB.cvPath}"  target="_blank" value="cv">
                        </h:link>

                        <h:outputText value="Cover Letter" />
                        <h:link outcome="#{applicationDetailsRequestBB.coverLetterPath}" target="_blank" value="cl">
                        </h:link>

                        <h:outputText value="Email:" />
                        <h:outputText value="#{applicationDetailsRequestBB.applicant.email}" />

                        <h:outputText value="Address:" />
                        <h:outputText value="#{applicationDetailsRequestBB.applicant.address}" />

                        <h:outputText value="City:" />
                        <h:outputText value="#{applicationDetailsRequestBB.applicant.city}" />

                        <h:outputText value="Phone:" />
                        <h:outputText value="#{applicationDetailsRequestBB.applicant.phone}" />

                        <h:outputText value="Mobile Phone:" />
                        <h:outputText value="#{applicationDetailsRequestBB.applicant.mobile}" />

                        <h:outputText value="Country:" />
                        <h:outputText value="#{applicationDetailsRequestBB.applicant.country}" />

                        <h:outputText value="Degree:" />
                        <h:outputText value="#{applicationDetailsRequestBB.applicant.degree}" />

                        <h:outputText value="School" />
                        <h:outputText value="#{applicationDetailsRequestBB.applicant.school}" />

                    </h:panelGrid>  



                </h:form>
            </ui:define>
        </ui:composition>
    </body>
</html>

#{applicationDetailsRequestBB.applicator.username}的申请详情
我的后盾是:

package pt.uc.dei.aor.finalproject.amj.platform.backingbeans;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
import java.io.Serializable;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.component.html.HtmlForm;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import pt.uc.dei.aor.finalproject.amj.databasefinalproject.entities.Applicant;
import pt.uc.dei.aor.finalproject.amj.databasefinalproject.entities.Application;
import pt.uc.dei.aor.finalproject.amj.databasefinalproject.facades.ApplicantFacade;
import pt.uc.dei.aor.finalproject.amj.databasefinalproject.facades.ApplicationFacade;

import pt.uc.dei.aor.finalproject.amj.platform.application.StatefulApplication;

/**
 *
 * @author Alvaro
 */
@Named
@RequestScoped
public class ApplicationDetailsRequestBB implements Serializable {

    private String cvPath;
    private String coverLetterPath;
    private String imgPath;
    private Applicant applicant;
    private Application application;

    @EJB
    private ApplicantFacade applicantFacade;
    @EJB
    private ApplicationFacade applicationFacade;

    public ApplicationDetailsRequestBB() {
    }

    @PostConstruct
    public void init() {

        Map<String, String> mapList = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        if (mapList.containsKey("applicantid") && mapList.containsKey("applicationid")) {
            Applicant a = applicantFacade.find(Long.parseLong(mapList.get("applicantid")));
            Application app = applicationFacade.find(Long.parseLong(mapList.get("applicationid")));
            if (a != null && app != null && app.getApplicant().equals(a)) {
                applicant = a;
                application = app;
                this.cvPath = "/CV/" + application.getCv();
                this.coverLetterPath = "/CL/" + application.getCoverLetter();
            }
        }

    }


    public String getCvPath() {
        return cvPath;
    }

    public void setCvPath(String cvPath) {
        this.cvPath = cvPath;
    }

    public String getCoverLetterPath() {
        return coverLetterPath;
    }

    public void setCoverLetterPath(String coverLetterPath) {
        this.coverLetterPath = coverLetterPath;
    }

    public String getImgPath() {
        return imgPath;
    }

    public void setImgPath(String imgPath) {
        this.imgPath = imgPath;
    }

    public Applicant getApplicant() {
        return applicant;
    }

    public void setApplicant(Applicant applicant) {
        this.applicant = applicant;
    }

    public ApplicantFacade getApplicantFacade() {
        return applicantFacade;
    }

    public void setApplicantFacade(ApplicantFacade applicantFacade) {
        this.applicantFacade = applicantFacade;
    }

    public Application getApplication() {
        return application;
    }

    public void setApplication(Application application) {
        this.application = application;
    }

    public ApplicationFacade getApplicationFacade() {
        return applicationFacade;
    }

    public void setApplicationFacade(ApplicationFacade applicationFacade) {
        this.applicationFacade = applicationFacade;
    }

}
包pt.uc.dei.aor.finalproject.amj.platform.backingbeans;
/*
*要更改此许可证标题,请在“项目属性”中选择“许可证标题”。
*要更改此模板文件,请选择工具|模板
*然后在编辑器中打开模板。
*/
导入java.io.Serializable;
导入java.util.Map;
导入javax.annotation.PostConstruct;
导入javax.ejb.ejb;
导入javax.enterprise.context.RequestScope;
导入javax.faces.component.html.HtmlForm;
导入javax.faces.context.FacesContext;
导入javax.inject.inject;
导入javax.inject.Named;
导入pt.uc.dei.aor.finalproject.amj.databasefinalproject.entities.applicator;
导入pt.uc.dei.aor.finalproject.amj.databasefinalproject.entities.Application;
导入pt.uc.dei.aor.finalproject.amj.databasefinalproject.facades.applicationfacade;
导入pt.uc.dei.aor.finalproject.amj.databasefinalproject.facades.ApplicationFacade;
导入pt.uc.dei.aor.finalproject.amj.platform.application.StatefulApplication;
/**
*
*@作者阿尔瓦罗
*/
@命名
@请求范围
公共类ApplicationDetailsRequestBB实现可序列化{
私有字符串路径;
私有字符串路径;
私有字符串imgPath;
私人申请人;
私人申请;
@EJB
私人申请学院申请学院;
@EJB
私有ApplicationFacade ApplicationFacade;
公共应用程序tailsrequestbb(){
}
@施工后
公共void init(){
Map mapList=FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
if(mapList.containsKey(“applicationid”)和&mapList.containsKey(“applicationid”)){
申请人a=applicationfacade.find(Long.parseLong(mapList.get(“applicationId”));
Application app=applicationFacade.find(Long.parseLong(mapList.get(“applicationid”));
如果(a!=null&&app!=null&&app.getapplicator().equals(a)){
申请人=a;
应用程序=应用程序;
this.cvPath=“/CV/”+application.getCv();
this.coverLetterPath=“/CL/”+application.getCoverLetter();
}
}
}
公共字符串getCvPath(){
返回路径;
}
公共void setCvPath(字符串cvPath){
this.cvPath=cvPath;
}
公共字符串getCoverLetterPath(){
返回路径;
}
public void setCoverLetterPath(字符串coverLetterPath){
this.coverlettpath=coverlettpath;
}
公共字符串getImgPath(){
返回imgPath;
}
公共void setImgPath(字符串imgPath){
this.imgPath=imgPath;
}
公共申请人{
返回申请人;
}
公共申请人(申请人){
this.applicator=申请人;
}
公共应用程序代码getapplicationfacade(){
归还申请书;
}
公共无效设置ApplicationFacade(ApplicationFacade ApplicationFacade){
this.applicationfacade=applicationfacade;
}
公共应用程序getApplication(){
退货申请;
}
公共应用程序(应用程序){
这个应用程序=应用程序;
}
公共ApplicationFacade getApplicationFacade(){
返回applicationFacade;
}
public void setApplicationFacade(ApplicationFacade ApplicationFacade){
this.applicationFacade=applicationFacade;
}
}

我在init方法中设置了一个断点,以进行调试,并且在第一次时未调用。当我刷新时,bean被调用,所有东西都正常工作。为什么第一次没有结果?

您是如何执行登录的?我猜您没有正确地从登录方法重定向到原始URL。