我是 JSF 和 Primefaces 的新手,刚刚开始研究登录和基本导航,我已经遇到了问题。我在这里遇到了大约 10 个类似的问题,但没有一个解决方案对我有用,所以我想我会发布我的具体问题,以便真正了解的人可以为我指明正确的方向。
登录:似乎和注销一样可以正常工作,但我很担心,因为浏览器中的 url 仍然显示登录后我在登录屏幕,并且我直接使用了 Oracle EE6 文档中的登录示例。下面提供登录方法。
public String login(){ FacesContext context = FacesContext.getCurrentInstance(); HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest(); try{ logger.log(Level.FINE, "User credentials: name: {0}, password: {1}", new Object[] {this.username, this.password}); request.login(this.username, encrypt(this.password)); logger.log(Level.FINE, "User: {0} logged in", this.username); }catch(ServletException e){ logger.log(Level.SEVERE, "User: {0} login failed, password: {1}", new Object[]{this.username, encrypt(this.password)}); context.addMessage(null, new FacesMessage("Login Failed!")); return "error"; } return "/faces/system/index";
}
登录后,我被带到正确目录中的正确页面,并且所有内容都正确显示,但是当您将鼠标悬停在链接上时,浏览器底部的状态栏会为所有三个链接显示相同的 url。下面提供的页面代码。
<h:body> <p:layout fullPage="true"> <f:facet name="last"> <h:outputStylesheet library="css" name="discovery.css"></h:outputStylesheet> </f:facet> <p:layoutUnit styleClass="headerDiv" position="north" size="100"> <h:graphicImage library="images" name="header.jpg"></h:graphicImage> </p:layoutUnit> <p:layoutUnit styleClass="navDiv" position="west" size="200" id="navPanel"> <h:form> <h:outputText value="Navigation Menu"></h:outputText> <br/> <p:commandLink value="First Time Users" update=":main"> <f:setPropertyActionListener target="#{navigationBean.pageToDisplay}" value="tutorial.xhtml"></f:setPropertyActionListener> </p:commandLink> <br/> <p:commandLink value="Help" update=":main"> <f:setPropertyActionListener target="#{navigationBean.pageToDisplay}" value="help.xhtml"></f:setPropertyActionListener> </p:commandLink> <br/> <h:commandLink action="#{loginBean.logout()}" value="Log Out"></h:commandLink> </h:form> </p:layoutUnit> <p:layoutUnit position="center" id="main"> <ui:include src="#{navigationBean.pageToDisplay}"></ui:include> </p:layoutUnit> </p:layout> </h:body>
NavigationBean
@Named(value = "navigationBean") @RequestScoped 公共类 NavigationBean 实现可序列化 {
公共 NavigationBean() { }
public String getPageToDisplay() { return pageToDisplay; }
公共无效 setPageToDisplay(String pageToDisplay) { this.pageToDisplay = pageToDisplay; }
私有字符串 pageToDisplay = "welcome.xhtml"; }
登录后页面加载时,显示导航 bean 中设置的默认页面,但单击注销链接以外的任何链接会导致默认页面从中心布局单元中消失并显示空白页面/单击日志out 链接确实会按预期将您注销。任何帮助将不胜感激。