Arhn - архитектура программирования

Почему jsp не видит атрибут по умолчанию в файле свойств?

Я делаю этот руководство по входу в Struts2 для начинающих. у меня это работает, за исключением того, что при доступе к странице входа в систему сначала не находят атрибуты для меток. Поэтому вместо: введите здесь описание изображения

я получаю страницу входа:

введите здесь описание изображенияИ страница ошибки:

введите здесь описание изображения

Однако он находит атрибут при успешном входе в систему с помощью простого тега свойства <s:property value="username" />
введите здесь описание изображения

Что я здесь упускаю?

Логин.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Struts 2 - Login Application</title>
</head>

<body>
<h2>Struts 2 - Login Application</h2>
<s:actionerror />
<s:form action="login.action" method="post">
    <s:textfield name="username" key="label.username" size="20" />
    <s:password name="password" key="label.password" size="20" />
    <s:submit method="authenticate" key="label.login" align="center" />
</s:form>
</body>
</html>

Welcome.jsp (при успешном входе в систему)

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Welcome</title>
</head>

<body>
    <h2>Howdy, <s:property value="username" />...!</h2>
</body>
</html>

login.xml, включенный в struts.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC 
'-//Apache Software Foundation//DTD Struts Configuration 2.0//EN' 
'http://struts.apache.org/dtds/struts-2.0.dtd'>

<struts>
      <constant name="struts.custom.i18n.resources"
        value="Credentials" />
    <package name="Login" namespace="/login" extends="struts-default">
        <action name="login"
    method ="authenticate"
            class="Login.LoginAction">
            <result name="success">/login/Welcome.jsp</result>
            <result name="error">/login/Login.jsp</result>
        </action>
    </package>
</struts>

Класс LoginAction:

package Login;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{
    private String username;
    private String password;

    public String authenticate() {

     if (this.username.equals("admin") 
                && this.password.equals("admin123")) {
            return "success";
        } else {
            addActionError(getText("error.login"));
            return "error";
        }
    }

    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;
    }
}

Файл свойств Credentials.properties

label.username= Username
label.password= Password
label.login= Login
error.login= Invalid Username/Password. Please try again.

Структура файла:
введите здесь описание изображения


Ответы:


1

Вы можете поместить все ресурсы для всех действий в пакет ресурсов Struts по умолчанию или поместить ресурсы каждого действия в отдельный пакет.

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

Таким образом, в вашем примере после запуска сервера файл необходимо скопировать в WEB-INF/classes/resources/, а затем

<constant name="struts.custom.i18n.resources"
        value="resources/login/Credentials.properties" />

ПС: можно

<constant name="struts.custom.i18n.resources"
        value="resources/login/Credentials.properties,resources/login/Otherfile.properties" />
05.04.2014
  • я не могу вспомнить, какое было решение, но это звучит как наиболее вероятный ответ, поэтому я принимаю его, так как не возвращался к этому проекту уже пару лет. 13.07.2017

  • 2

    После прочтения этого кажется, что это файл проблема структуры. По-видимому, файлы свойств должны находиться в WEB-INF. Структура, которую я использовал, была предоставлена ​​после указания фреймворка как Struts2 после следования Руководство по платформе NetBeans, в котором был пример проекта со свойствами, не относящимися к WEB-INF.

    03.04.2014
  • на самом деле, теперь я не думаю, что это проблема каталога. потому что, перепроверив это, пример проекта не находится под WEB-INF, но он все еще работает. Я загружу фото моей файловой структуры. проблема, похоже, в том, что он не получает доступ к атрибутам до тех пор, пока форма не будет отправлена/не будет предоставлено действие. В примере проекта этого делать не нужно. 03.04.2014
  • в файле примера не указано имя свойства, поэтому я переименовал Credentials.properties в package.properties, и теперь он правильно обращается на странице ошибки, но все еще не на начальной странице до того, как действие произошло. 03.04.2014

  • 3

    используйте ‹s:сообщение›

    <s:form action="login.action" method="post">
        <s:message code="label.username" text="defUsername">
        <s:textfield name="username" size="20" />
    
        <s:message code="label.password" text="defPassword">
        <s:password name="password" size="20" />
    
        <s:submit method="authenticate" align="center" >
          <s:message code="label.login" var="var_lbl_login">
        </s:submit>
    </s:form>
    
    29.06.2017
  • Нет такой вещи, как <s:message>. 29.06.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..