2009-10-11 50 views
0

在一个简单的Web应用程序中,我必须将jsp与jsf(用于学校作业)相结合。我正在使用NetBeans 6.7.1。在我的登录页,我有以下代码:JSF/JSP混合问题

<html> 
<body> 
    <form name="form" method="post" action="processuserinfo.jsp" > 
     UserName: <input type="text" name = "username" value=""><br> 
     Password: <input type="password" name="userpassword" value=""><br> 
     <input type="submit" name="submit" value="Login"> 
    </form> 
</body> 
</html> 
</body> 

的processuserinfo.jsp:

<%@page import="java.util.*" %> 
<jsp:useBean id="idhandler" class="dsassignment1java.LoginManager" scope="session"> 
<jsp:setProperty name="idhandler" property="*"/> 
</jsp:useBean> 
<% idhandler.validateUser(session, pageContext); %> 

然而,该方法validateUser不会被调用。我认为它与faces-config.xml中定义的导航规则有关,但我不知道如何正确设置规则。我试着像这样定义的规则:

<navigation-case> 
     <from-outcome>goProcessUserInfo</from-outcome> 
     <to-view-id>/processuserinfo.jsp</to-view-id> 
    </navigation-case> 

,并指定goProcessUserInfo为我的形式作用,但它不能正常工作。

回答

4

您没有以任何方式使用JSF--这是一个纯HTML页面,它调用一个JSP(它不包含任何JSF标签)。

重新制定登录页面作为JSF JSP,你可以把它写是这样的:

<?xml version="1.0" encoding="UTF-8" ?><jsp:root 
    xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core"><jsp:directive.page 
    language="java" 
    contentType="text/html; charset=UTF-8" 
pageEncoding="UTF-8" /><jsp:text><![CDATA[<?xml version="1.0" encoding="UTF-8" ?> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> ]]> 
    </jsp:text> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    </head> 
    <body> 
    <f:view> 
    <h:form> 
     user: <h:inputText value="#{idhandler.username}" /><br /> 
     pw: <h:inputText value="#{idhandler.password}" /><br /> 
     <h:commandButton value="login" action="#{idhandler.validateUser}" /> 
    </h:form> 
    </f:view> 
    </body> 
    </html> 
</jsp:root> 

这定义了一个包含两个文本输入控件和一个按钮的形式控制一个JSF视图。输入和按钮绑定到一个托管bean。托管bean可能是这样的:

public class LoginManager { 
    private String username; 
    private String password; 

    public String getUsername() { return username; } 
    public void setUsername(String username) { this.username = username; } 

    public String getPassword() { return password; } 
    public void setPassword(String password) { this.password = password; } 

    public String validateUser() { 
    // TODO: check login details 
    boolean authenticated = true; 
    return authenticated ? "goProcessUserInfo" : "errorPage"; 
    } 
} 

validateUser方法的返回值被用于匹配导航案件<from-outcome>。 FYI

<managed-bean> 
    <managed-bean-name>idhandler</managed-bean-name> 
    <managed-bean-class>dsassignment1java.LoginManager</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope> 
    </managed-bean> 

:管理bean将在您的faces-config.xml定义编写JSF应用程序时,你尽量少用任何标准动作(jsp:...标签在http://java.sun.com/JSP/Page命名空间),通常会避免JSTL标签(<c:...标签http://java.sun.com/jsp/jstl/...命名空间)并且从不使用scriptlets(<% ... %>视图嵌入代码)。

有关更多信息,请参见JEE5 tutorialJavaServer Faces section