2010-11-22 3 views
0

J'ai configuré le résultat comme suit: C'est mon type de résultat personnalisé.La transmission de paramètres à struts2 ne fonctionne pas

<result-types> 
    <result-type name="myBytesResult" class="blahblah.MyBytesResult" /> 
</result-types> 


<action name="myAction" class="blahblah.MyAction"> 
    <result name="success" type="myBytesResult"> 
     <param name="pptId">${pptId}</param> 
    </result> 
</action> 

Et mon résultat a setter/getter pour pptId et MonAction a également setter/getter pour pptId. Mais quand je vérifie mon résultat, il ne règle pas pptId (j'obtiens $ {pptId} comme chaîne dans le résultat). Il semble que ce ne soit pas getter d'Action.

Ce qui pourrait être la raison pour la même chose?

Le code MonAction

public String doDefault() { 
     System.out.println("Default Called"); 
     setPptId("MyPpt"); 
     return "success"; 
    } 

    public byte[] getMyImageInBytes() throws Exception { 
     try { 
       //..... 
     } catch (Exception e) { 

     } 
     return null; 

    } 


public String getContentType() { 
    return contentType; 
} 

public void setContentType(String contentType) { 
    this.contentType = contentType; 
} 

public String getPptId() { 
    return this.pptId; 
} 

public void setPptId(String pptId) { 
    this.pptId = pptId; 
} 

MyBytesResult

private String contentType; 

private String pptId; 


public void execute(ActionInvocation invocation) throws Exception { 
    HttpServletResponse response = ServletActionContext.getResponse(); 
     //...Some more code for settign response 
    System.out.println("pt Id[" + this.pptId + "]"); 

} 


public String getContentType() { 
    return contentType; 
} 


public void setContentType(String contentType) { 
    this.contentType = contentType; 
} 


public String getPptId() { 
    return pptId; 
} 


public void setPptId(String pptId) { 
    this.pptId = pptId; 
} 
+0

Veuillez indiquer le code pour MyBytesResult et MyAction. –

+0

Le code d'action et le résultat mis à jour –

Répondre

0

réponse Mise à jour

Ainsi, après quelques recherches, il semble que cela fonctionne vraiment bien. Il est de la responsabilité du résultat d'évaluer les données entrantes en tant qu'expression OGNL si cela est nécessaire. C'est ainsi que fonctionnent les résultats de redirection et d'en-tête http. Vous pouvez analyser la valeur par rapport à la pile dans votre résultat personnalisé comme suit:

String resolvedPptId = TextParseUtil.translateVariables(pptId, stack) 

De l'Javadoc pour translateVariables:

convertit toutes les instances de $ {...} et {% .. .} dans expression à la valeur retournée par un appel à {@link ValueStack # findValue (java.lang.String)}. Si un élément ne peut pas être trouvé sur la pile (null est renvoyé), alors la variable entière $ {...} n'est pas affichée, comme si l'élément était sur la pile mais renvoyait une chaîne vide.

+0

$ {# pptId} ne fonctionnaient pas. Et getPptId() n'est pas non plus appelé ... J'ai ajouté un enregistreur ici. –

+0

J'ai fait quelques tests et j'ai révisé ma réponse. –

+0

A travaillé ..! Thnx ... –

Questions connexes