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


Автор: Ares4322 22.3.2010, 10:43
Доброго времени суток!
Использую Struts2. Есть файл struts2.xml. Делаю валидацию через xml файлы. Почему то неправильно работает перенаправление в action'е deviceControl. При submit'е перенаправляется не на себя, а на registration. 
Вот struts.xml. В чем может быть проблема?
Код

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <constant name="struts.action.excludePattern" value="/appDataLoader"/>
    <package name="XXX" extends="struts-default">
        
        <!-- Добавляем тип Tiles-->
        <result-types>
            <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
        </result-types>
        
        <!-- при активации Action с именем *Link формируется шаблон на основе Tiles-->
        <action name="*Link" method="{1}" class="XXX.web.LinkAction">
            <result name="main" type="tiles">main</result>
            <result name="buy" type="tiles">buy</result>
            <result name="faq" type="tiles">faq</result>
            <result name="news" type="tiles">news</result>
            <result name="cabinet" type="tiles">cabinet</result>
            <result name="partners" type="tiles">partners</result>
            <result name="contacts" type="tiles">contacts</result>
            <result name="registration" type="tiles">registration</result>
            <result name="deviceControl" type="tiles">deviceControl</result>
            <result name="input" type="tiles">registration</result>
        </action>
        
        <!--Action для регистрации -->
        <action name="registration" class="XXX.logic.Registration" >
            <result name="success" type="chain">
                <param name="actionName">cabinetLink</param>
            </result>
            <result  name="input" type="chain">
                <param name="actionName">registrationLink</param>
            </result>
        </action>
 
        <action name="deviceControl" class="XXX.logic.DeviceControl" >
            <result name="success" type="chain">
                <param name="actionName">deviceControlLink</param>
            </result>
            <result  name="input" type="chain">
                <param name="actionName">deviceControlLink</param>
            </result>
        </action>

        <action name="cabinet" class="XXX.logic.Cabinet" >
            <result name="success" type="chain">
                <param name="actionName">cabinetLink</param>
            </result>
            <result  name="input" type="chain">
                <param name="actionName">registrationLink</param>
            </result>
        </action>

        <action name="login" class="ru.cybermonitor.logic.Login">
            <result name="success" type="chain">
                <param name="actionName">cabinetLink</param>
            </result>
            <result name="error">registrationError.jsp</result>
            <result  name="input" type="chain">
                <param name="actionName">registrationLink</param>
            </result>
            <result  name="login" type="chain">
                <param name="actionName">mainLink</param>
            </result>
        </action>

    </package>
</struts>


Автор: MisterCleric 22.3.2010, 11:37
При обвале валидации происходит возврат INPUT.
У тебя action deviceControl при input чейнит на deviceControlLink.
А этот попадает на твой action *Link. Какой при этой метод LinkAction вызывается, что бы понимать какой же result у тебя возвращается? А то видно, что на registration попадает при input ?

Автор: Ares4322 22.3.2010, 11:47
На registrationLink LinkAction возвращает registration и , соответственно, на deviceControLink - deviceControl. 
Проблема в том, используется Tiles. А для него нельзя перенаправлять на страничку, надо перенаправлять именно на *Link. Это специальный action, который собирает страничку из шаблона.

Автор: MisterCleric 22.3.2010, 12:32
дык, класс-то ru.cybermonitor.web.LinkAction ты писал сам, что в нем происходит?

Автор: Ares4322 22.3.2010, 13:01
import com.opensymphony.xwork2.ActionSupport;

public class LinkAction extends ActionSupport {

    public String main() {
        return "main";
    }

    public String news() {
        return "news";
    }

        public String buy() {
        return "buy";
    }
        public String faq() {
        return "faq";
    }

    public String cabinet() {
        return "cabinet";
    }

    public String contacts() {
        return "contacts";
    }

    public String partners() {
        return "partners";
    }

    public String registration() {
        System.out.println("registration");
        return "registration";
    }
    public String deviceControl() {
        System.out.println("deviceControl");
        return "deviceControl";
    }
}


Автор: MisterCleric 22.3.2010, 13:12
И что пишет в логи это?
Цитата

System.out.println("deviceControl");

Автор: Ares4322 22.3.2010, 13:42
да я для себя это пишу. не в этом то проблема!

Автор: Ares4322 22.3.2010, 15:11
Уже разобрался. Спасибо! В который раз сам разбираюсь, быстрее, чем получаю тут ответ)

Автор: MisterCleric 22.3.2010, 15:52
А в чем, собственно, проблема-то была?

Автор: Ares4322 22.3.2010, 15:54
проблема была в том, как написать код, чтоб при использовании со struts2 tiles работала валидация. попробуйте сами и поймете)

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