2016-09-21 82 views
0

我拉着我的頭髮試圖獲得在JSP中工作的自定義函數。我已經閱讀了關於該主題的其他問題,但是我沒有犯這些錯誤,並且正在遵循一本JSP書籍(首先是Servlets & JSP)來創建我的標記。自定義函數從.tld文件不能正常工作

這裏是位於/ WEB-INF /我login.tld文件:

<tlib-version>1.2</tlib-version> 
<uri>/WEB-INF/login.tld</uri> 
<function> 
    <name>validate</name> 
    <function-class>org.patrickslagle.model.LoginManager</function-class> 
    <function-signature> 
     boolean validate(String username, String password) 
    </function-signature> 
</function> 

在LoginManager類中的方法:

public static boolean validate(String username, String password) { 
    System.out.println("Servlet"); 
    DatabaseManager dbm = new DatabaseManager(); 
    boolean valid = false; 
    ResultSet rs = null; 
    Statement stmt = null; 
    dbm.setUrl("jdbc:mysql://localhost:3306/pattycakes"); 
    dbm.connect(); 
    try { 
     stmt = dbm.getConn().createStatement(); 
     String sql = "SELECT * FROM users WHERE email = '" + username + "' AND password = '" + password + "'"; 
     rs = stmt.executeQuery(sql); 
     if (rs.next()) { 
      valid = true; 
     } 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } finally { 
     dbm.disconnect(stmt, dbm.getConn()); 
    } 
    return valid; 
} 

} 

和標籤在index.jsp中:

<%@ taglib prefix="lm" uri="/WEB-INF/login.tld"%> 

它被稱爲像這樣:

<c:if test="${ lm.validate(username, password) }"> 

在一個網頁上的表單這兩個輸入:

 <input type="text" name="username" id="user_login" class="input" 
       placeholder="Email Address" value="" size="20" /> 

<input type="password" name="password" id="user_pass" class="input" 
        placeholder="Password" value="" size="20" /> 

如果我打印到控制檯,我發現,在測試裏面什麼不會被打印,並且LoginManager中的System.out.println永遠不會被打印。它只是跳過測試。

無法在調試模式下找出問題。我假設表達式僅僅因爲某種原因沒有被評估,並且什麼也沒有返回。

回答

0

而是採用

boolean validate(String username, String password) 

嘗試使用

boolean validate(java.lang.String username, java.lang.String password) 

也,而不是使用

<c:if test="${ lm.validate(username, password) }"> 

嘗試使用在你login.tld,

<c:if test="${lm:validate(username, password)}"> 

如果您從請求中獲取數據,那麼您可能需要

<c:if test="${lm:validate(param.username, param.password)}">