Класс действий Struts2 при загрузке страницы

Я должен упустить что-то, что, я надеюсь, кто-то может исправить меня. Веб-приложение, которое я унаследовал, использует страницы struts2 и JSP, и я хочу организовать его с помощью этого менеджера компоновки ( http://igniteui.com/layout-manager/border-layout-markup). Слева будет меню со ссылками, которые будут загружать контент в центр, в то время как «главная» страница (верхний и нижний колонтитулы, левое меню) останется на месте, что, как я считаю, соответствует принципам SPA. «Контент» посередине будет страницами JSP с формами с полями ввода, которые отправляются после действий пользователя.

Чего я не понимаю, так это того, как действия распорки вписываются в это. В приложении есть действия, определенные в struts.xml, и они отлично работают при отправке этой страницы/формы. Но что делать, когда новый JSP загружается в раздел содержимого главной страницы? Как или какое действие связано с этой загрузкой?

В настоящее время главная страница использует iframe для содержимого:

<div class="center">
    <iframe id="ifrmContent" name="iframe" src="jspDefaultContent.jsp" </iframe>
</div>

и когда нажимается ссылка в левом меню, я переключаю контент следующим образом:

$("#ifrmContent").attr('src','jspNewContent.jsp');

Сначала я должен спросить, является ли это правильным/лучшим способом сделать это, поскольку я видел/слышал, что использование фреймов не идеально.

Во-вторых, конкретная проблема заключается в том, что нет никакого «действия», связанного с загрузкой этой новой страницы содержимого JSP. Таким образом, OGNL, который использовался для заполнения некоторых списков элементов s:select данными из базы данных, не работает. В частности, это БУДЕТ работать: «%{@com.my.class@countryList}», потому что он вызывает статическую переменную в этом классе сервера Java, но это НЕ работает: «%{getCities()}», поскольку он пытается вызвать метод класса действия.. и его нет. Он не вызывает действие страницы MAIN и не вызывает класс действий страницы содержимого.

Как я могу получить класс действия, связанный со страницей контента, которую я загружаю из ссылки меню? Или как это можно/должно организовать, чтобы у меня не было этих проблем, учитывая, что я хочу только обновить/отправить контент, а не всю ГЛАВНУЮ страницу?

Спасибо за любой совет.


person user3708842    schedule 14.02.2015    source источник


Ответы (2)


  1. Нет ничего плохого в использовании <iframe> (для правильных целей), это лучший вариант для их вариантов использования (например, встраивание документа в страницу). Идите вперед и проверьте, не используются ли они здесь неправильно, если вам не все равно.

  2. Инфрагистические материалы IgniteUI, похоже, не всегда очень хорошо подходят для Struts2 (и вообще для Java), они, похоже, созданы с учетом экосистемы .NET. Другой пользователь спросил о работая с их виджетом File Uploader... будьте осторожны.

  3. Когда вы устанавливаете атрибут src для <iframe>, вызывается этот URL. Поскольку вы используете Struts2, никакие JSP не должны вызываться напрямую, вместо этого они должны быть результатами выполнения действий.

    Итак... просто вызовите действия вместо JSP:

    <div class="center">
        <iframe id="ifrmContent" src="defaultContet.action" />
    </div>
    
    $("#ifrmContent").attr('src','newContent.action');
    
person Andrea Ligios    schedule 16.02.2015

Во-первых
Вы можете использовать css, чтобы разделить страницу на заголовок, нижний колонтитул, меню, тело. Это облегченный подход. Это может заменить iframe для ваших целей.

  • iFrame загрузит фрейм как отдельную страницу. Если вы пишете страницу с 1 фреймом в области тела, это похоже на загрузку 2 страниц, что немного замедлит загрузку страницы.
  • Содержимое iframe будет загружаться первым, а затем будет отображаться содержимое веб-страницы, поэтому вы обнаружите, что часть содержимого на некоторых веб-страницах заполняется быстро, а другое содержимое загружается с задержкой.
  • Вы можете использовать iFrame для загрузки AD, но старайтесь избегать этого.

Второе
Как я могу получить класс действия, связанный со страницей контента, которую я загружаю по ссылке меню?
< br> Вы можете указать элементы действий любой из ваших JSP-страниц на сервлет действий (struts.xml). Вы должны указать действие с этой страницы JSP на действие, которое вы хотите отобразить в Struts.xml.

Это та же модель, что и у базовой программы struts2. если у вас есть базовое понимание потока struts, вы можете это сделать.

как это можно/должно организовать, чтобы у меня не было этих проблем, учитывая, что я хочу только обновить/ отправлять контент, а не всю ГЛАВНУЮ страницу?

В этом случае не следует использовать iframe для загрузки контента в раздел body. Iframe загружает всю веб-страницу для каждого HTTP-запроса.
Ответом на это является использование AJAX с jQuery.

person divine    schedule 16.02.2015
comment
дайте мне знать, если у вас есть какие-либо вопросы программно. Кстати, вы можете принять мой ответ, если он поможет - person divine; 20.02.2015