powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring MVC + Inheritance + Collections
8 сообщений из 8, страница 1 из 1
Spring MVC + Inheritance + Collections
    #38416178
TepKuH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги,
У меня какая то не понятка с наследованием bean'ов. Непонятка такого характера, что если я делаю наследования в bean'е именно от какой либо коллекции например HashMap у меня bean ничего не возвращает во view.
Проиллюстрирую сию проблему в коде следующем образом:

Controller:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@Controller
@RequestMapping("/controller")
public class MyController {

    @RequestMapping(value = "/index.html", method= RequestMethod.GET)
    public String index(Model model) {
        MyBean myBean = new MyBean();
        model.addAttribute("myBean", myBean);
        return "controller/index";
    }
}



View:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<%@page contentType="text/html;charset=UTF-8" language="java" %>

<html>
  <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    MyBean: ${myBean.fieldMyBean}
  </body>
</html>



Bean:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class MyBean extends HashMap<String, String> {
    private String fieldMyBean = "justText";

    public void setFieldMyBean(String fieldMyBean){
        this.fieldMyBean = fieldMyBean;
    }
    public String getFieldMyBean(){
        return this.fieldMyBean;
    }
}



Ну так вот если я в Bean делаю "extends HashMap<String, String>" на браузер возвращается только:
" MyBean: "

Если же я убираю это наследование или делаю наследование не от коллекции, а от чего нить друго то возвращается все ок, а именно:
" MyBean: justText "

Объясните мне плиз, что я делаю не так. Или научите правильно гуглить. А то уже второй день ни на гуглить не могу нефига внятного почему так получается, не реализовать в коде.
...
Рейтинг: 0 / 0
Spring MVC + Inheritance + Collections
    #38416236
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, из-за того, что бин - это Map, берется не свойство, а значение по ключу: myBean.get("fieldMyBean").

Для проверки можно в наследнике от HashMap сделать put("fieldMyBean", "anotherText") и посмотреть что скажет JSP.
...
Рейтинг: 0 / 0
Spring MVC + Inheritance + Collections
    #38416240
TepKuH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander A. SakПохоже, из-за того, что бин - это Map, берется не свойство, а значение по ключу: myBean.get("fieldMyBean").

Для проверки можно в наследнике от HashMap сделать put("fieldMyBean", "anotherText") и посмотреть что скажет JSP.

Вы были правы.
JSP говорит вот так:
" MyBean: justAnotherText "
На следующий код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Controller
@RequestMapping("/controller")
public class MyController {

    @RequestMapping(value = "/index.html", method= RequestMethod.GET)
    public String index(Model model) {
        MyBean myBean = new MyBean();
        myBean.put("fieldMyBean","justAnotherText");
        model.addAttribute("myBean", myBean);        
        return "controller/index";
    }
}


Прикольное поведение :)
А нельзя ли как то объяснить Spring'у что это не ключ все таки, а бин пусть даже и в наследниках у него HashMap? А то что то не хочется колхоз какой то городить :)
...
Рейтинг: 0 / 0
Spring MVC + Inheritance + Collections
    #38416252
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы уже поступаете неправильно, когда наследуетесь от MAP. Вам надо просто создать класс обертку у которой будет два свойства, мапа и ваша строка.
...
Рейтинг: 0 / 0
Spring MVC + Inheritance + Collections
    #38416295
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не Spring, а JSP. Точнее, Expression Language, используемый в JSP. Вычислять выражение bean.prop как свойство prop объекта bean -- это частный случай одного из ELResolver.
Никогда не задумывался в какой последовательности эти резолверы выполняются. Наверное, потомоу, что не сталкивался. А не сталкивался, потому что так делать не принято.
...
Рейтинг: 0 / 0
Spring MVC + Inheritance + Collections
    #38416299
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот, кстати, и объяснение.
Expression Language Specification
Version 2.1

BeanELResolver
...
Because this resolver handles base objects of any type, it should be placed near the end of a composite resolver. Otherwise, it will claim to have resolved a property before any resolvers that come after it get a chance to test if they can do so as well

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

Так что послушайте товарища забыл ник .
...
Рейтинг: 0 / 0
Spring MVC + Inheritance + Collections
    #38416355
TepKuH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никВы уже поступаете неправильно, когда наследуетесь от MAP. Вам надо просто создать класс обертку у которой будет два свойства, мапа и ваша строка.
Всю жизнь так делал, класс обёртку, но тут пришла идеи с оптимизировать часть бинов, а оно вон оно как получилось
Не красивенько как то :( bean длиннее получился по коду :) да и в JSP дополнительные приседания надо будет сделать :(
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public class MyBean{
    private String fieldMyBean = "justText";
    private Map myHashMap = new HashMap();

    public void setFieldMyBean(String fieldMyBean){
        this.fieldMyBean = fieldMyBean;
    }
    public String getFieldMyBean(){
        return this.fieldMyBean;
    }

    public void setMyHashMap(Map myHashMap){
        this.myHashMap = myHashMap;
    }

    public Map getMyHashMap(){
        return this.myHashMap;
    }
}



Alexander A. SakЭто не Spring, а JSP. Точнее, Expression Language, используемый в JSP. Вычислять выражение bean.prop как свойство prop объекта bean -- это частный случай одного из ELResolver.
Никогда не задумывался в какой последовательности эти резолверы выполняются. Наверное, потомоу, что не сталкивался. А не сталкивался, потому что так делать не принято.
Спасибо большое вы очень мне помогли. Перечитаю еще разок, подзабыл я что то.
...
Рейтинг: 0 / 0
Spring MVC + Inheritance + Collections
    #38416772
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TepKuH но тут пришла идеи с оптимизировать часть бинов

Странные у вас представления об оптимизации. Убрать сеттер и геттер, которые можно нагенерировать и ввести непонятное наследование от хэшмапа. Наследование в принципе должно использоваться в редчайших случаях, когда между классами есть отношение is-a, ваш бин это не мапа, так что идея просто кошмарная, никогда так не делайте.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring MVC + Inheritance + Collections
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]