Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JSP — с чего начать? 
V
    Опции темы
goodday1941
Дата 16.8.2007, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 709
Регистрация: 16.7.2006
Где: Украина, Киев

Репутация: нет
Всего: 9



Maksym, спасибо за ответ


Цитата(Maksym @  16.8.2007,  15:57 Найти цитируемый пост)
Это так. Но главный плюс css в возможности отделить логические структуры страниц от деталей оформления и централизовать управление внешним видом системы.


это я еще понял с поста Stampede странички три назад smile 


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
diablero
Дата 16.8.2007, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



В нашем полку все пребывает и пребывает.
Попрошу вновь прибывших и всех кто следит за темой,  предлагать на Ваш взгляд более оптимальные решения возникающих в теме проблем.

Следующий шаг выполнил. Посты добавляются.
Код

public class SubmitPostWorker extends AbstractWorker implements Worker {
    public Page execute(HttpServletRequest request, HttpServletResponse response) {
        super.execute(request, response);
        Infinite infinite = Infinite.getInstance();
        PostManager manager = infinite.getPostManager();

        String section = request.getParameter("section");
        String title = request.getParameter("title");
        String text = request.getParameter("text");

        String message = null;
        if(manager.containsPost(title)) {
            message = "DUPLICATE_NAME";
        } else if (title.length()==0) {
            message = "TITLE_LENGHT_NULL";
        } else if (text.length()==0) {
            message = "TEXT_LENGHT_NULL";
        }
        if (message==null) {
            Post post = new Post();
            post.setId(infinite.getSectionManager().getSectionId(section));
            post.setUserId(page.getAuthUser().getId());
            post.setTitle(title);
            post.setText(text);
            post.setDate(new Date());
            manager.setPost(post);

            ConfirmData data = new ConfirmData();
            data.setActionType(ConfirmData.POST_ADDED);
            data.setBean(post);
            request.getSession().setAttribute("confirmData", data);

            page.setRedirectUrl("/confirmation.shtml");
        } else {
            FormData formData = new FormData(getParameterMap());
            formData.setMessage(message);
            request.getSession().setAttribute("formData", formData);
            
            page.setRedirectUrl("/form/postform.shtml");
        }
        return page;
    }
}

Код

public class PostFormWorker extends AbstractWorker implements Worker {
    public Page execute(HttpServletRequest request, HttpServletResponse response) {
        super.execute(request, response);
        FormData formData = (FormData) request.getSession().getAttribute("formData");
        formData = (formData == null) ? new FormData() : formData;

        Infinite infinite = Infinite.getInstance();
        SectionManager manager = infinite.getSectionManager();

        ArrayList sectionlist = manager.getSections();

        page.put("sectionlist", sectionlist);
        page.put("formData", formData);
        page.put("content", "form/postform.vm");
        return page;
    }
}

Цитата(Stampede @  14.8.2007,  00:33 Найти цитируемый пост)
Нет уж, вот есть у тебя сущность Section, вот в ней и надо сразу заложить иерархичность. Если самостоятельно не получится, будем решать вместе.

Попробывал, поэксперементировал и вот что получилось. Некоторые методы могут показаться лишними. Но их можно позже убрать.
Код

public class SectionManager implements Manager {
    @PersistenceUnit(unitName = "Infinite")
    private EntityManager entityManager;

    public void init() {
        entityManager = Infinite.getInstance().getEntityManager();
    }

    public Section getSection(int id) {
        return entityManager.find(Section.class, id);
    }

    public ArrayList <Section> getSections() {
        Query query = entityManager.createNamedQuery("getAllSections");
        return (ArrayList<Section>) query.getResultList();
    }
    public ArrayList <Section> getParentSection() {
        Query query = entityManager.createNamedQuery("getParentSection");
        return (ArrayList<Section>) query.getResultList();
    }
    public ArrayList <Section> getSonSection(int parentID) {
        Query query = entityManager.createNamedQuery("getSonSection");
        query.setParameter("parent_id", parentID);
        return (ArrayList<Section>) query.getResultList();
    }
    public Section getSection(String sectionName) {
        Query query = entityManager.createNamedQuery("getSectionByName");
        query.setParameter("sectionName", sectionName);
        return (Section) query.getSingleResult();
    }
    public int getSectionId(String sectionName) {
        Query query = entityManager.createNamedQuery("getSectionByName");
        query.setParameter("sectionName", sectionName);
        Section section = (Section) query.getSingleResult();
        return section.getId();
    }
    public void setSection(Section section) {
        entityManager.persist(section);
    }
    public void destroy() {
        entityManager.clear();
    }
}

Как только сделаем редактирование, мне кажется нужно подводить жЫрную черту, уже слишком много кода добавилось и изменилось. Который требует разборки, переосмысливания и критикиsmile

P.S. как элементу textarea задать размеры в процентах?

Это сообщение отредактировал(а) diablero - 16.8.2007, 23:33


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
goodday1941
Дата 17.8.2007, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 709
Регистрация: 16.7.2006
Где: Украина, Киев

Репутация: нет
Всего: 9



Цитата(diablero @  16.8.2007,  23:30 Найти цитируемый пост)
 как элементу textarea задать размеры в процентах?


походу никак прикольная мануалка

Добавлено через 3 минуты и 5 секунд
хм... хотя как раз с помощью атрибута columns! просто пишем ему значение 50%


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
goodday1941
Дата 17.8.2007, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 709
Регистрация: 16.7.2006
Где: Украина, Киев

Репутация: нет
Всего: 9



Цитата(diablero @  16.8.2007,  23:30 Найти цитируемый пост)
Попрошу вновь прибывших и всех кто следит за темой,  предлагать на Ваш взгляд более оптимальные решения возникающих в теме проблем.


что могу сказать: ООП подход который тут используеться на всю котушку мне очень нравится.. а в плане веба судить не могу, так как сам занимаюсь Swing, JDBC, RMI и тд и тп но никак не веб :(

Добавлено @ 10:04
вот решение для textarea: textarea

Это сообщение отредактировал(а) goodday1941 - 17.8.2007, 11:30


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
Stampede
Дата 17.8.2007, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Итак, обещанное редактирование. Как мы сейчас убедимся, это будет очень легко. Нам даже не придется ничего добавлять - мы только изменим маленько существующий код.

1. УРЛ формы редактирования будет тот же самый, но c параметром id поста:

/form/post.shtml?id=1234

Ссылку на этот адрес можно сформировать на странице просмотра поста. Но, разумеется, не для всех, а только если user совпадает с author, или если изер входит в группу админов.

2. В PostFormWorker мы анализируем параметр запроса id, и если он присутствует, вытаскиваем пост из базы:

Код

// formData = (formData == null) ? new FormData() : formData; - вместо этой строчки пишем:
if (formData == null) {
    formDate = new FormData()
    String idstr = request.getParameter("id");
    if ((idstr != null) && (idstr.length() > 0)) {
        int id = Integer.parseInt(idstr);
        Post post = infinite.getPostManager().getPost(id);
        formData.put("postId", post.getId());
        formData.put("title", post.getTitle());
        formData.put("text", post.getText());
        // ...
    }
}


3. В шаблоне fkrm/post.vm добавляем скрытое поле postId:

Код

<input type=hidden name=postId"" value="$!formData.postId">


4. И теперь нам только остается в SubmitFormWorker смотреть на параметр postId, и если он равен какому-то числу, обновлять соответствующий пост, а если нет, то создавать новый.

Фсе, телемаркет!

smile



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 19.8.2007, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Редактирование почти работает smile
Код Post Manager
Код

public void updatePost(Post post) {
        entityManager.refresh(post);
 }

На этом методе вылетает следующее исключение:
Код

java.lang.IllegalArgumentException: Entity not managed
    org.hibernate.ejb.AbstractEntityManagerImpl.refresh(AbstractEntityManagerImpl.java:261)
    ru.selfexpression.contents.manager.PostManager.updatePost(PostManager.java:27)
    ru.selfexpression.contents.worker.SubmitPostWorker.execute(SubmitPostWorker.java:42)
    ru.selfexpression.ControllerServlet.service(ControllerServlet.java:54)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


Пока разбираюсь с этим.

З.Ы. Случайно когда разбирал рабочую папку, удалил исходники проекта. Восстановилось как на зло, не все. Тем самым, мой двухдневный труд, по созданию и работе с учетной записью, накрылся медным тазом. Поэтому, такая задержка. Почти, все восстановил, теперь бэкаплюсь чащеsmile


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 19.8.2007, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Так а ты пост предварительно загружаешь из базы по id? Похоже, ты его просто создаешь через new Post().

И вот еще, diablero: я завтра утром уезжаю до четверга. В зависимости от того, что успеем наваять, перед отъездом расскажу, что делать дальше.



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 19.8.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Было так как ты и сказалsmile
Все разобрался, в тесте все работает. Было так как ты и сказал


Это сообщение отредактировал(а) diablero - 19.8.2007, 16:50


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 19.8.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Ага, отлично.

Задание такое: хорошенько все причеши и выложи архив. Это должен быть уже практически готовый вебсайт.

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



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 19.8.2007, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Оказалось почти отлично.
Исключение теперь не выбрасывает, но и не обновляет пост в базе.

Код

public class Test {
    public static void main(String args[]) {
        String homeDir = (args.length > 0) ? args[0] : System.getProperty("user.dir");

        Infinite infinite = Infinite.getInstance();
        infinite.init(homeDir);

        EntityTransaction rtx = null;
        try {
            PostManager postManager = infinite.getPostManager();
            EntityManager entityManager = infinite.getEntityManager();
            rtx = entityManager.getTransaction();
            rtx.begin();
            Post p = postManager.getPost(30);
            p.setText("test update text");
            postManager.updatePost(p);
            p = postManager.getPost(30);
            rtx.commit();
        } catch (Exception err) {
            if (rtx != null) {
                rtx.rollback();
            }
        }
    }
}


Это сообщение отредактировал(а) diablero - 19.8.2007, 16:58


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
diablero
Дата 19.8.2007, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Все разобрался. Перед тем как обновлять бин в базе нужно вызвать метод:
Код

entityManager.flush();



--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
ouks
Дата 20.8.2007, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 22.6.2007

Репутация: нет
Всего: нет



продолжаю и я медленно   smile 
пытаюсь все делать по шагам.. Завис на следующем, а именно на cookie. Работает все отлично, но вот тут я начал сортировать все по пакетам, как вы и советовали(бины в бины, воркеры в воркеры итд).  В итоге у меня все это дело встало и сервлет вообще не находит. Так или иначе.. скачал я Infinite1.1.3.5,  запустил и снова никак мне не добраться до сервлета  smile 

 smile 
PM MAIL   Вверх
diablero
Дата 21.8.2007, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Цитата(ouks @  20.8.2007,  23:17 Найти цитируемый пост)
В итоге у меня все это дело встало и сервлет вообще не находит.

Проверь все классы, может ты где-то забыл имена пакетов изменить.

Цитата(ouks @  20.8.2007,  23:17 Найти цитируемый пост)
Так или иначе.. скачал я Infinite1.1.3.5,  запустил и снова никак мне не добраться до сервлета

Я выкладываю архив прям из своего проекта. Т.е. все 100% рабочее. Просто внимательно посмотри все еще разок.
Может он стартует. Но на чем-то вылетает, поверь имя и пароль до базы, размещение всех файлов....воспользуйся логером 

Это сообщение отредактировал(а) diablero - 21.8.2007, 20:01


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
diablero
Дата 23.8.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Цитата(Stampede @  19.8.2007,  16:47 Найти цитируемый пост)
Нам останется только сделать постраничный просмотр. Ну, может еще статистику.

Я еще хотел бы под твоим руководством, доделать до конца работу со статьями. А именно работу картинками. Механизмы сохранения, обновления и т.д.
И еще у меня пару вопросов:
Как выглядит механизм активации пользователей? На сколько он реально необходим?
Как задать кодировку при работе с базой? Существует проблема с русской кодировкой. 

Подвожу жЫрную черту. 

Это сообщение отредактировал(а) diablero - 26.8.2007, 22:48

Присоединённый файл ( Кол-во скачиваний: 61 )
Присоединённый файл  Infinite1.1.4.6.zip 86,49 Kb


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 29.8.2007, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



diablero, я сейчас сильно занят и на работе и дома. Давай ты пока попробуешь разобраться самостоятельно. В принципе почти все, что нужно для дальнейшей работы над вебсайтом, ты уже знаешь.

Что касается картинок. Для загрузки файлов есть множество готовых компонентов. Поищи на форуме, этот вопрос многократно обсуждался. Просто реши для себя, в каком месте будут храниться картинки, как будет формироваться имя для новых картинок и где прописывать инфу о них.

Думаю, проще всего будет использовать для этой цели готовый сервлет, который вряд ли получится втиснуть в получившийся у нас фреймворк. В этом случае надо будет предусмотреть для него индивидуальный шаблон УРЛ и соответствующий маппинг в web.xml. Но возможно, существуют и более гибкие компоненты, которые удастся встроить в структуру воркера.

Если что - проси помощи клуба smile

Быстренько по вопросам:

Цитата(diablero @  23.8.2007,  06:16 Найти цитируемый пост)
Как выглядит механизм активации пользователей? На сколько он реально необходим?


Не понял, что имеется в виду.

Цитата(diablero @  23.8.2007,  06:16 Найти цитируемый пост)
Как задать кодировку при работе с базой? Существует проблема с русской кодировкой.


Есть подозрение, что проблема не в базе, а в вебном слое. Это в принципе в любом случае надо было сделать: в ControllerServlet.service() в самом начале (во всяком случае до переого обращения к параметрам), нужно добавить:

Код

request.setCharacterEncoding(encoding);


Кодировка должна быть такой же, какую ты задаешь при выводе через response.setContentType().

Возможно, на этом все и починится. Если нет, разбирайся с мускулем. А вообще посоветовал бы везде использовать utf-8.




--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1294 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.