Struts2 - 如果我调用Action-Bean2,如何从Action-Bean1调用方法?

时间:2010-12-12 16:26:35

标签: ajax model-view-controller jsp struts2 javabeans

我做了一个名为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>

处查看(在代码中)我需要从另一个动作中加载一个值,而不是配置文件:在这里我需要加载(例如)另一个方法行动豆。 (例如<s:property value="someMethod" />

我该怎么办?我认为使用Struts是不可能的,因为我只能在时间上调用1个动作。那么,拦截器?我需要更改应用程序的整个结构吗?

让我知道。干杯

2 个答案:

答案 0 :(得分:2)

// BEAN

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 :(得分:1)

有些不正确的东西,因为你永远不想为任何事情转到2个不同的动作。没有办法这样做。但是,您可以从jsp进行ajax调用并指向不同的操作并加载该值。