我已经使用Spring 3 MVC框架编写了一个jsp页面(login.jsp)。在该页面中,我有一个jsp:include标记,该标记传递了几个jsp:param字符串。 jsp:include标记指向另一个jsp页面(credentials.jsp)。我将要拥有几个类似于login.jsp的jsp页面,它们的区别仅在于它们传递到指向凭据.jsp的jsp:include标记中的参数字符串。
在credit.jsp中,我有一个form:form标记,在该标记中,我有一些form:input和form:password标记,并在其中使用了参数字符串。根据将哪些参数字符串传递到凭据.jsp(login.jsp将传递与forgotpassword.jsp不同的参数字符串),使用不同的形式:输入/密码标签。使用jstl c:if标签有条件地包括这些标签。
这是在login.jsp中找到的jsp:include标记代码:
<jsp:include page="./credentials.jsp">
<jsp:param name="title" value="Login" />
<jsp:param name="action" value="processlogin" />
<jsp:param name="modelAttribute" value="login" />
<jsp:param name="username-placeholder" value="pick something unique" />
<jsp:param name="password-placeholder" value="secret phrase you can remember" />
<jsp:param name="helpText" value="Username is your name for login purposes. It is not your handle and it is not your profile name." />
<jsp:param name="linkText1" value="Forgot your username?" />
<jsp:param name="link1" value="forgotusername" />
<jsp:param name="linkText2" value="Forgot your password?" />
<jsp:param name="link2" value="forgotpassword" />
</jsp:include>
这是凭据.jsp中的代码:
<form:form id="login" action="${param.action}" modelAttribute="${param.modelAttribute}" method="post">
<c:if test="${param.username-placeholder != null}">
Username:<br/>
<form:input class="text" path="username" value="" maxlength="20" placeholder="${param.username-placeholder}"/><form:errors path="username" cssClass="error"/><br/>
</c:if>
<c:if test="${param.password-placeholder != null}">
Password:<br/>
<form:password class="password" path="password" value="" maxlength="20" placeholder="${param.password-placeholder}"/><span id="togglePassword">show</span><form:errors path="password" cssClass="error"/><br/><br/>
</c:if>
<c:if test="${param.reenterpassword-placeholder != null}">
Re-Enter Password:<br/>
<form:password class="password" path="reEnterPassword" value="" maxlength="20" placeholder="${param.reenterpassword-placeholder}"/><form:errors path="reEnterPassword" cssClass="error"/><br/><br/>
</c:if>
<c:out value="param?: ${param.reenterpassword-placeholder}"/>
<input class="submit-button" id="login-button" type="submit" value="Submit"/>
</form:form>
问题:尝试此操作时,出现以下错误。如何避免此错误?
org.springframework.beans.NotReadablePropertyException:无效 bean类的属性“ reEnterPassword” [com.studypartner.main.Login]:Bean属性'reEnterPassword'不是 可读或具有无效的getter方法:是否返回 getter与设置器的参数类型匹配吗?
答案:
我能够解决此问题,并且找到了解决方法,但事实证明这是不正确的。对于初学者来说,请参见下面的链接,他们声称检查c:if标记!= null中的值是否是检查不存在的参数字符串的方法:
Check if parameter exists in Expression Language
但是,我发现如果我改为检查参数字符串不等于零,那么它可以工作。
我通过使用c:out标记(参见上文)验证了这一点,以查看param.reenterpassword-placeholder的值是什么。 (我认为)由于未将其作为参数传递给凭据.jsp,因此其值为0。
但是事实证明这是不正确的!
当我进一步调查时,结果发现,如果参数名称中包含“破折号”,则在解析它时,它总是 为零!
对我来说,解决方案是从参数字符串名称中删除破折号,然后按照链接中的建议使用!= null对我有用。
如果对此方法需要改进,我对此表示感谢。