2010-12-12 5 views
1

Je fais une sorte d'action appelée ProfileSelector, qui est chargée par un appel ajax (en utilisant la bibliothèque JQuery).Struts2 - Comment puis-je appeler une méthode depuis Action-Bean1 si j'appelle Action-Bean2?

Voici le code:

// 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> 

Looks (dans le code) à ICI J'AI BESOIN DE CHARGE D'UNE VALEUR D'UN AUTRE BEAN-ACTION, pas le profil d'un: est ici que je dois charger (par exemple) une méthode d'un autre Bean Action. (Exemple <s:property value="someMethod" />

Comment puis-je faire? Je pense est impossible avec Struts, parce que je peux appeler seulement 1 action au temps. Donc, Interceptors? Je dois changer ma structure de l'application?

Let Cheers

Répondre

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>  

// De navigateur

http://localhost:8888/showListBook.action 

P.S: Si vous familier avec Struts 1, il travaille comme DispatchAction.

1

Il y a quelque chose d'incorrect car vous ne voulez jamais avoir 2 actions différentes pour quoi que ce soit, il n'y a aucun moyen de le faire, mais vous pouvez faire un appel ajax depuis le jsp et pointer vers différent action et charger la valeur

+0

C'est ce que je ne comprends pas sur Struts2: ce n'est pas vraiment un MVC. C'est juste un A (ction) VC ... :) – markzzz

+0

Oui, Struts2 est MVC. Je vous recommande de prendre un bon livre sur Struts2, car vous avez tellement de questions. http://www.manning.com/dbrown/ –

+0

Pour ce que je sais, le MODÈLE existe pour gérer mes données sur le serveur (c'est comme ça que j'ai vu Bean étendu sur JSF, par exemple). Sur struts2 j'ai besoin de gérer mes données manuellement (comme mettre un objet à la session). Il n'y a donc pas de grande différence avec les autres langages procéduraux. Comme PHP. Peut-être que je me trompe :) (je l'espère ..) – markzzz

Questions connexes