Jsf SimpleCRUD登录失败
我正在使用的平台:Jsf SimpleCRUD登录失败,jsf,jpa,jakarta-ee,jaas,apache-tomee,Jsf,Jpa,Jakarta Ee,Jaas,Apache Tomee,我正在使用的平台: 软呢帽20 mariadb-5.5.34-2.fc20.x86_64 www.Eclipse.org上的Eclipse开普勒服务发布 ApacheTomee plus 1.6.0 我正在实现一个示例 我正在尝试使用登录界面。我的问题是login.xhtml网页正确获取用户名和密码,但是 public void login(ActionEvent actionEvent) java对网页登录按钮的响应不正确。特别是,该网页没有说明用户名和密码的正确性。要查看应该发生什
- 软呢帽20李>
- mariadb-5.5.34-2.fc20.x86_64李>
- www.Eclipse.org上的Eclipse开普勒服务发布李>
- ApacheTomee plus 1.6.0
public void login(ActionEvent actionEvent)
java对网页登录按钮的响应不正确。特别是,该网页没有说明用户名和密码的正确性。要查看应该发生什么,请参见上一链接中的交互式示例。
取而代之的是我电脑上发生的事情的简短视频
为了了解发生了什么,我将一些控制台输出放在JavaBean中,我发现getter/setter方法正在工作,唯一不工作的方法是
public void login(ActionEvent actionEvent)
确实是印刷品
System.out.println("Entering in public void login(ActionEvent actionEvent)");
不会出现在控制台中
Login.xml
<ui:composition template="/templates/layout.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
>
<ui:define name="content">
<h:form styleClass="loginPanelStyle">
<p:growl id="msgs" showDetail="true" sticky="false" />
<p:panelGrid columns="2">
<f:facet name="header">
Login Panel
</f:facet>
<h:outputText value="Username : "></h:outputText>
<p:inputText id="username" value="#{loginController.username}" required="true" requiredMessage="Please Enter Username!" message="fc">
<f:validateLength minimum="1" />
</p:inputText>
<h:outputText value="Password : "></h:outputText>
<p:password id="password" value="#{loginController.password}" required="true" requiredMessage="Please Enter password!">
<f:validateLength minimum="1" />
</p:password>
<f:facet name="footer">
<p:commandButton value="Submit" update="msgs" action="#{loginController.login}"
icon="ui-icon-check" style="margin:0" />
</f:facet>
</p:panelGrid>
</h:form>
</ui:define>
</ui:composition>
里面是什么(2):
我上载了两个conf目录,以便您可以查阅它们
要将TomEE配置为使用JAAS操作,我要求:
所以我用这种方式在Eclipse中配置了TomEE
- 我在apache-tomee-plus-1.6.0-JAAS/conf/server.xml中添加了JAAS标记
- 在中添加了login.config和login.properties apache-tomee-plus-1.6.0-JAAS/conf/
将commandButton标记的属性改为
actionListener
而不是action
应该可以解决问题。你能发布你的web.xml文件吗?你可以在帖子中找到Github链接:-)我在这里再次粘贴它尝试将commandButton标记的属性改为actionListener
填写答案,而不是操作
@Omar,这样我就可以给你打绿色分数了
<p:commandButton value="Submit" update="msgs" action="#{loginController.login}" icon="ui-icon-check" style="margin:0" />
<p:commandButton value="Submit" update="msgs" action="#{loginController.login}" icon="ui-icon-check" style="margin:0" />
package controller;
import util.DateUtility;
import java.io.IOException;
import java.io.Serializable;
import java.security.Principal;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
* Login Controller class allows only authenticated users to log in to the web
* application.
*
* @author Emre Simtay <emre@simtay.com>
*/
@Named
@SessionScoped
public class LoginController implements Serializable {
@Inject
private transient Logger logger;
private String username;
private String password;
/**
* Creates a new instance of LoginController
*/
public LoginController() {
System.out.println("LoginController instantiated");
}
// Getters and Setters
/**
* @return username
*/
public String getUsername() {
System.out.println("getUsername: " + username);
return username;
}
/**
*
* @param username
*/
public void setUsername(String username) {
this.username = username;
System.out.println("setUsername sets username: " + this.username);
}
/**
*
* @return password
*/
public String getPassword() {
System.out.println("getPassword is: " + password);
return password;
}
/**
*
* @param password
*/
public void setPassword(String password) {
this.password = password;
System.out.println("setPassword sets password: " + this.password);
}
/**
* Listen for button clicks on the #{loginController.login} action,
* validates the username and password entered by the user and navigates to
* the appropriate page.
*
* @param actionEvent
*/
public void login(ActionEvent actionEvent) {
System.out.println("Entering in public void login(ActionEvent actionEvent)");
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
try {
String navigateString = "";
// Checks if username and password are valid if not throws a ServletException
request.login(username, password);
// gets the user principle and navigates to the appropriate page
Principal principal = request.getUserPrincipal();
if (request.isUserInRole("Administrator")) {
navigateString = "/admin/AdminHome.xhtml";
} else if (request.isUserInRole("Manager")) {
navigateString = "/manager/ManagerHome.xhtml";
} else if (request.isUserInRole("User")) {
navigateString = "/user/UserHome.xhtml";
}
try {
logger.log(Level.INFO, "User ({0}) loging in #" + DateUtility.getCurrentDateTime(), request.getUserPrincipal().getName());
context.getExternalContext().redirect(request.getContextPath() + navigateString);
} catch (IOException ex) {
logger.log(Level.SEVERE, "IOException, Login Controller" + "Username : " + principal.getName(), ex);
context.addMessage(null, new FacesMessage("Error!", "Exception occured"));
System.out.println("(DEBUG) CONSOLE OUTPUT: Error!, Exception occured");
}
} catch (ServletException e) {
logger.log(Level.SEVERE, e.toString());
context.addMessage(null, new FacesMessage("Error!", "The username or password you provided does not match our records."));
System.out.println("(DEBUG) CONSOLE OUTPUT: Error!, The username or password you provided does not match our records.");
}
}
/**
* Listen for logout button clicks on the #{loginController.logout} action
* and navigates to login screen.
*/
public void logout() {
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
logger.log(Level.INFO, "User ({0}) loging out #" + DateUtility.getCurrentDateTime(), request.getUserPrincipal().getName());
if (session != null) {
session.invalidate();
}
FacesContext.getCurrentInstance().getApplication().getNavigationHandler().handleNavigation(FacesContext.getCurrentInstance(), null, "/Login.xhtml?faces-redirect=true");
}
}
.
├── catalina.policy
├── catalina.properties
├── context.xml
├── groups.properties
├── logging.properties
├── login.config
├── server.xml
├── server.xml.original
├── system.properties
├── tomcat-users.xml
├── tomcat-users.xml.original
├── tomee.xml
├── users.properties
└── web.xml
0 directories, 14 files
.
├── catalina.policy
├── catalina.properties
├── context.xml
├── server.xml
├── tomcat-users.xml
└── web.xml