我正在试图让一个自定义函数在JSP中工作。我已经阅读了有关该主题的其他问题,但我没有犯过这些错误,并且在创建我的标签时遵循了JSP书(Head First Servlets& JSP)。
这是我的login.tld文件,位于/ WEB-INF /:
<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 :(得分:0)
在您的login.tld中,而不是使用
boolean validate(String username, String password)
尝试使用
boolean validate(java.lang.String username, java.lang.String password)
也是,而不是使用
<c:if test="${ lm.validate(username, password) }">
尝试使用
<c:if test="${lm:validate(username, password)}">
如果您从请求中获取数据,那么您可能需要
<c:if test="${lm:validate(param.username, param.password)}">