2016-05-19 1 views
0

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

<s:action name="doLogin" executeResult="true"></s:action> 

и ниже соответствующая запись struts.xml

<action name="doLogin" class="siteLoginAction"> 
    <result name="input">login</result> 
    <result name="success">home</result> 
</action> 

СПЯ просто Войти ДИВ (форма, текстовое поле, метка).

Теперь проблема заключается в том, что, когда я тестирую функция Validate

@Override 
public void validate() { 
    String username = siteUser.getSiteUserUsername(); 
    String password = siteUser.getSiteUserPassword(); 

    if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) { 
     addFieldError("siteUser.siteUserUsername", "Invalid login"); 
    } else if (!siteUserService.checkLoginExists(username, password, getBlogSiteUrl())) { 
     addFieldError("siteUser.siteUserPassword", "Invalid login"); 
    } 
} 

Как вы можете видеть, что это работает,

enter image description here

, но он не уйдет. Сообщение об ошибке будет оставаться там каждый раз, когда я посещаю эту страницу.

Это из-за одиночной модели по умолчанию Struts2? Я попытался @Scope («прототип»), но, если я использую его не отображает сообщение об ошибке на всех

ответ

0

У меня есть этот <s:action> тег в моем JSP

Вы не должны использовать это тег, это старая и бесполезная технология, отпустите ее ASAYC.

Это из-за однотонной модели по умолчанию действия Struts2? Я пробовал @Scope («прототип»), но если я его использую, он вообще не отображает ошибку

Действия ThreadLocal. То, о чем вы говорите, с «модель по умолчанию» - это размер по умолчанию (Singleton) из фасоли весны, and hence of a Struts2 Action if managed by Spring. И было бы неправильно, вы должны использовать scope="prototype" в этом случае, чтобы действия, управляемые Spring, корректно работали как объекты ThreadLocal.

Этот вопрос больше не подлежит обсуждению прямо сейчас; просто снимите тег <s:action/>, используйте scope="prototype" (или отбросьте Spring, по крайней мере, на обработку действий) и посмотрите, что произойдет, тогда, если он все еще не работает, вернитесь сюда и попросите еще раз: тогда вам будет легче помочь.

+0

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

+0

Неправильно: почему * любой неизвестный * JSP должен иметь возможность встроить в него окно входа? Если требуется логин, просто переадресовывайте всю страницу на страницу входа (в конечном итоге сохраняя URL-адрес страницы, с которой вы пришли), а затем после успешного входа в систему. В противном случае, imho –

+0

используйте iframe –

Смежные вопросы