Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Формы в Struts


Автор: Akeem 18.11.2009, 10:05
У меня на странице в один момент времени находиться только одна форма.  Страница обрабатывается одним контроллером (нужно ли так делать?).
Как мне "обьяснить" Struts что щас на странице находиться одна форма, а в другой момент будет находится другая форма?

Пример: 
1) форма регистрации
2) форма отсылки фидбека. 

Формы находятся в одном месте страницы, весь остальной контент страницы не меняется, только часть логин или фидбек
 smile 

Это конфигурируется в struts-config.xml либо  на уровне вешания двух контроллеров на две формы.


Юзаю Struts 1.3
Спасибо!

Автор: carper 18.11.2009, 11:23
Я так и не понял, что надо объяснять STRUTS.

На странице можете размещать сколько угодно форм, например, воспользовавшись тэгом s:if, чтобы
показывать нужную.
Также можете привязывать к этой странице множество actions, или одну, или одну с разными методами (см. атрибут method в struts.xml).

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


P.S. А варианты с одинаковым заголовком и футером лучше решаются через тэги include и т.п.

Автор: Akeem 18.11.2009, 13:42
у меня не jsp а Velocity, хотя это не меняет ничего.

carper, 
когда загружается страница, то на этой странице находится форма логина (другая вообще не рендерится). Если пользователь залогинен, то форма логина исчезает и появляется другая форма. и эти формы очень сильно отличаются. 

У меня в конфиге прописано вот такие три строчки. 
Код

<action path="/myaction" input="/previousaction" type="mycontroller"><forward name="someforward"></action>
<action path="/myaction" input="/myaction" name="loginform" type="mycontroller"><forward name="someforward"></action>
<action path="/myaction" input="/myaction" name="feedbackform" type="mycontroller"><forward name="someforward"></action>

в итоге я получаю что у меня распознается форма feedbackform вместо loginform 

Можно поподробнее про атрибут method, а то не совсем понятно как им пользоватся.

Автор: carper 18.11.2009, 16:58
Значится так (пишу сразу здесь, извиняйте за опечатки в коде), вот один из способов с двумя формами и про атрибут method:

Код

<action name="MyAction_*" method="{1}" class="mypackage.MyAction">
    <result name="input">${login}</result>        
</action>
 
Это в struts.xml

Код

  ...
  class MyAction extends ActionSupport implements ... {
    private String login;
    public String getLogin() {
      return login;
    } 

    public String loginUser() {
      .....
      login = "/jsp/nonsec/login.jsp";
      return Action.INPUT;  
    }

     public String feedback() {
      .....
      login = "/jsp/nonsec/feedback.jsp";
      return Action.INPUT;  
    }
    ....
  }


Ниже, код той формы из которой вы обращаетесь к action:
Код

....
<body>
   Тут что-то типа меню, или : 
   <s:from action="MyAction_feedback" .....

   <s:from action="MyAction_loginUser" .....
</body>


Ну про то как включать стандартные заголовки в странички, думаю и так ясно.


Сразу же отвечаю на 2-ой вопрос, а как быть если страничку все же хочется иметь одну?

Аналогично, только убираем ${login} из <result name="input">${login}</result> ,
 зато анализируем login (тогда лучше его сделать boolean) в тэге s:if

Код

   <s:if test="login ">Тут рисуем форму логина</s:if>
   <s:else>Ну тогда рисуем форму обратной связи</s:else>


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

Автор: Akeem 23.11.2009, 17:37
Проблему решил изменением логики.  Если мне нужно чтобы пользователь был залогинен, то я ласково прошу пользователя перейти на страницу логина и оттуда после авторизации возвращаю страницу обратно. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)