форма: входные теги выбираются программно на основе переданных в параметрах, избегая ошибок - PullRequest
0 голосов
/ 16 сентября 2018

Я написал страницу jsp (login.jsp), используя среду Spring 3 MVC.На этой странице у меня есть тег jsp: include, который передается в нескольких строках jsp: param.Тег jsp: include указывает на другую страницу jsp (credentials.jsp).У меня будет несколько страниц jsp, похожих на login.jsp, и различающихся только строками параметров, которые они передают в тег jsp: include, который указывает на credentials.jsp.

В credentials.jsp у меня есть тег form: form, и в этом теге у меня есть несколько тегов form: input и form: password, в которых используются строки параметров.В зависимости от того, какие строки параметров передаются в credentials.jsp (login.jsp будет передаваться в разных строках параметров, нежели забытый пароль.jsp), используется различная форма: теги ввода / пароля.Условное включение этих тегов выполняется с использованием тега jstl c: if.

Вот код тега jsp: include, указанный в файле login.jsp:

<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: недопустимое свойство 'reEnterPassword' класса бина [com.studypartner.main.Login]: свойство бина 'reEnterPassword' не доступно для чтенияили имеет недопустимый метод получения: совпадает ли возвращаемый тип получения с параметром установки?

Ответ:

Мне удалось устранить неполадку, и я нашелОбходной путь, но он оказался неверным.Для начала, смотрите ссылку ниже, они утверждают, что проверка, если значение в теге c: if! = Null, является способом проверки несуществующей строки параметра:

Проверьте, если параметрсуществует в языке выражений

Однако я обнаружил, что если вместо этого я проверяю, что строка параметра не равна нулю, это работает вместо этого.

Я проверял это с помощью c:из тега (см. выше), чтобы узнать, каково было значение param.reenterpassword-placeholder.(Я думал), что поскольку он не передается в качестве параметра в credentials.jsp, его значение равно 0.

Но это оказалось неверным!

Когда я продолжил исследование, оказалось, чтоЕсли у вас есть «тире» в имени параметра, когда вы его решаете, всегда заканчивается нулями!

Решением для меня было удалить дефис из имен строк параметров, а затем использование! = Null, как предложено в ссылке, сработало для меня.

Я благодарен за любые комментарии по этому поводу.В случае, если мой подход нуждается в улучшении.

...