Struts2 - Как я могу вызвать метод из Action-Bean1, если я вызываю Action-Bean2? - PullRequest
1 голос
/ 12 декабря 2010

Я выполняю своего рода действие под названием ProfileSelector, которое загружается при вызове ajax (с использованием библиотеки JQuery).

Это код:

// BEAN
public class ProfileSelector extends ActionSupport implements ParameterAware {
    private String profilePage;
    private Map<String, String[]> parameters;

    @Override
    public String execute() throws Exception {
        profilePage=getParameterValue("profilePage");
        return profilePage;
    }

    public String getParameterValue(String param) {
        if (getParameters().get(param)==null) return "main";
        return ((String[])getParameters().get(param))[0];
    }

    public Map<String, String[]> getParameters() { return parameters; }
    public void setParameters(Map<String, String[]> maps) { this.parameters=maps; }

    public String getProfilePage() { return profilePage; }
    public void setProfilePage(String profilePage) { this.profilePage=profilePage; }
}

// STRUTS.XML
<action name="profile" class="model.ProfileSelector" >
    <result name="main">/profile/profile_main.jsp</result>
    <result name="edit">/profile/profile_edit.jsp</result>
    <result name="editConfirm">/profile/profile_edit.jsp</result>
    <result name="pm">/profile/profile_pm.jsp</result>
    <result name="articles">/profile/profile_articles.jsp</result>
</action>

// PAGE.JSP
<c:choose>
    <c:when test="${profilePage=='edit'}">
        <s:div>
            EDIT
            <s:url id="edit" action="profile.action"><s:param name="profilePage">editConfirm</s:param></s:url>
            <sj:submit href="%{edit}" targets="profileContent" value="Edit" />
        </s:div>
    </c:when>

    <c:when test="${profilePage=='editConfirm'}">
        // HERE I NEED TO LOAD A VALUE FROM ANOTHER BEAN-ACTION, not the profile one
    </c:when>
</c:choose>

Смотрит (в коде) на ЗДЕСЬ Я ДОЛЖЕН ЗАГРУЗИТЬ ЗНАЧЕНИЕ ИЗ ДРУГОГО ДЕЙСТВИЯ С БИНОМ, а не из профиля : здесь мне нужно загрузить (например) метод из другого действия -Bean. (пример <s:property value="someMethod" />

Как я могу это сделать? Я думаю, что это невозможно с Struts, потому что я могу вызвать только 1 действие за раз. Итак, перехватчики? Мне нужно изменить всю структуру приложения?

Дайте мне знать. Приветствия

Ответы [ 2 ]

2 голосов
/ 13 декабря 2010

// Боб

public class ListBookAction extends ActionSupport {
    BookService bookService;
    List<Book> bookList;

    public List<Book> getPostedBooks(){
        List<Book> bookList = new ArrayList<Book>();
        bookList = bookService.getUserPostedBooks();
        return bookList;
    }

    public String show(){
        bookList = getPostedBooks();
        return "list";
    }
    public List<Book> getBookList() {
        return bookList;
    }
    public void setBookService(BookService bookService) {
        this.bookService = bookService;
    }
}

// STRUTS.XML

        <action name="*ListBook" class="com.example.ListBookAction" method="{1}">
            <result name="list"  type="tiles-defs">listbook.listbook</result>
        </action>       

// Из браузера

http://localhost:8888/showListBook.action

P.S: Если вы знакомы с Struts 1, он работает как DispatchAction.

1 голос
/ 12 декабря 2010

Есть что-то неправильное, так как вы никогда не хотите переходить к 2 различным действиям для чего-либо. Там нет никакого способа сделать это. Тем не менее, вы можете сделать ajax-вызов из jsp и указать на другое действие и загрузить значение.

...