Перенаправление в Struts 1 метод processPreProcess - PullRequest
0 голосов
/ 28 декабря 2011

Попытка перенаправить пользователей на страницу входа, если их сеанс больше недействителен из переопределения процесса ProcessRereProcess, которое я написал.Я использовал

response.sendRedirect("launch.do?method=launchLogin&type=multi");

и

ActionMapping loginMapping = processMapping(request, response, "/launch");
ActionForward loginForward = loginMapping.findForward("launchLogon");
processForwardConfig(request, response, loginForward);

. Я вижу, что вызывается правильное действие входа в систему, и оно успешно перенаправляется на нужную страницу, НО значения моей формы не передаютсяJSP по какой-то причине.Я устанавливаю значения формы в действии следующим образом:

if (type !=null && type.equals("multi")){
Collection<OptionBean> list = this.loadApplicationDropDown();

if (list != null) {
   theForm.setApplicationList(list);
   theForm.setShowDropDown(true);
    }
 }
 return mapping.findForward("Success");

Я вижу, что этот код выполняется, и эти члены заполняются правильно, но как только он попадает в JSP, applicationList становится пустым, а showDropDown ложным.Я также знаю, что класс Action работает правильно, потому что, если я обычно запускаю приложение, появляется форма с заполненным выпадающим элементом.

Есть ли что-то еще, что мне нужно сделать, чтобы убедиться, что моя ActionForm находится в области видимости?

РЕДАКТИРОВАТЬ: Вот соответствующий код на JSP.Я использовал bean: write, чтобы проверить значение showDropDown, и оно возвращает false, даже если оно установлено в true в действии.applicationList также пуст, как только он попадает в jsp, но снова я вижу, как он заполняется в действии:

<logic:present property="applicationList" name="logonForm">
   <logic:equal property="showDropDown" name="logonForm" value="true">
   <tr>
    <td class="lbl" align="left">
          <html:select property="application" size="1">
            <html:optionsCollection name="logonForm" property="applicationList" value="value" label="label"/>
          </html:select>
        </td>
    </TR>
    </logic:equal>
    </logic:present>

РЕДАКТИРОВАТЬ: Вот определение соответствия действия:

action   path="/launch"
              type="otrack.core.LaunchApplicationAction"
              parameter="method"
              name="logonForm"
              scope="request"
              input="/jsp/index.jsp">
              <forward   name="launchLogon" path="/launch.do?method=launchLogin&amp;type=multi"/>
              <forward   name="Success" path="/jsp/Logon.jsp"/>
              <forward   name="Launch" path="/jsp/appFrameNew.jsp"/>
              <forward   name="Failure" path="/jsp/index.jsp"/>
    </action>

Вот полный метод в классе Action:

public ActionForward launchLogin(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException {

        LogonForm theForm = (LogonForm) form;
        ActionErrors errors = new ActionErrors();
        try {
            //get the request parameter name "type" to know if
            //drop down needs to be shown or not
            String type = request.getParameter("type");

            if (type !=null && type.equals("multi")){
                Collection<OptionBean> list = this.loadApplicationDropDown();

                if (list != null) {
                    //set the option list on the form
                    theForm.setApplicationList(list);
                    theForm.setShowDropDown(true);
                }
            }

            HttpSession session = request.getSession(false);

            return mapping.findForward("Success");
        } catch (Exception e) {
            if (e instanceof AppException) {
                AppException ae = (AppException) e;

                if (ae.getRootCause() != null) {
                    errors.add(ActionErrors.GLOBAL_ERROR,
                        new ActionError(ae.getMessage().trim(), ae.getRootCause().getMessage()));
                } else {
                    errors.add(ActionErrors.GLOBAL_ERROR,
                        new ActionError(ae.getMessage().trim(), ""));
                }

                saveErrors(request, errors);

                return (new ActionForward(mapping.getInput()));
            }

            return (new ActionForward("Failure"));
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...