2017-05-27 4 views
0

De JSP, Seule la valeur booléenne ne se lie pas à la variable booléenne de l'action Toutes les autres variables se lient bien. xBudgetFlag est une variable booléenne qui n'est pas obligatoire. Toutes les autres variables sont liées. Plus tôt de l'action à JSP également pas travaillé, après avoir ajouté plusieurs getters pour xBudgetFlag son fonctionnement bien. quelqu'un pls m'aider à cet égard.La valeur booléenne de Struts2 action ne lie pas JSP après la soumission du formulaire

@Component 
@Scope(value = "request") 
public class PaActions extends ActionSupport { 

private static final long serialVersionUID = 1L; 

. 
. 
. 
private Long keyId; 
private String taxUnit; 
private Long surveyTypeId; 
private String surveyType; 
private Long accountId; 
private String status; 
private Boolean parentFlag; 
private Boolean xBudgetFlag; 

// all setter getter are here 
// Tried with different ways of getter method thinking isxBudgetFlag() is working, but still all three getters are threre in action class 
public Boolean getxBudgetFlag() { 
    return xBudgetFlag; 
} 
public Boolean isXBudgetFlag() { 
    return xBudgetFlag; 
} 
public Boolean isxBudgetFlag() { 
    return xBudgetFlag; 
} 

public void setxBudgetFlag(Boolean xBudgetFlag) { 
    this.xBudgetFlag = xBudgetFlag; 
} 

@Transactional(readOnly = false, propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT) 
public String save() { 
    . 
    . 
    . 

    System.out.println("----------isxBudget --"+isxBudgetFlag()); // printing null 
    System.out.println("---------- isXbudget --"+isXBudgetFlag()); // printing null 
    System.out.println("---------- GET XBUDGET --"+getxBudgetFlag());  // printing null 
    System.out.println("---------- xBudgetFlag --"+xBudgetFlag);     // printing null 
    . 
    . 
    . 
    return SUCCESS; 
} 
} 

dans JSP pa-edit.jsp

<s:form id="PaActions" action="pa-submit" validate="true"> 
<s:token /> 
<s:hidden name="keyId" id="keyId"/> 
. 
. 
. 
<tr> 
    <td class="formLabel"><label for="xBudgetFlag">X-Budget Flag</label></td> 
    <td><s:checkbox property="xBudgetFlag" name="xBudgetFlag" /></td> 
</tr> 
. 
. 
. 
<s:submit property="save" value="Save" id="save" /> 
</s:form> 

struts.xml

<action name="pa-submit" class="/PaActions" method="save"> 
<result name="success" type="redirectAction"> 
    <param name="actionName">pa-display</param> 
    <param name="key">${keyId}</param> 
</result> 
<result name="input" type="tiles">.pa.edit</result> 
<result name="invalid.token" type="tiles">.pa.edit</result> 
</action> 

tiles.xml

<definition name=".pa.edit" > 
<put-attribute name="title" value="Project KKK" /> 
<put-attribute name="body" value="/pages/pa-edit.jsp" /> 
<put-attribute name="parentMenu" value="pa" cascade="true" /> 
</definition> 

Prévenez-moi pour plus d'informations si elle est nécessaire .

+0

Version de Struts/OGNL? –

+0

Désolé pour la réponse tardive, la version de struts est 2.3.16.3 – user3682520

Répondre

0

Roman C, vous êtes vraiment génial .. il a travaillé avec setXBudgetFlag (Boolean xBudgetFlat), lettre majuscule X .. Mais je me demande pourquoi ça ne fonctionne pas avec setxBudgetFlag .. (petit x) qui est généré par éclipse .. Peu importe .. Merci Roman C

0

Essayez d'utiliser un autre nom setter

public void setXBudgetFlag(Boolean xBudgetFlag) { 
    this.xBudgetFlag = xBudgetFlag; 
} 

lorsque le formulaire est soumis la méthode setter est appelé à remplir des variables de classe d'action de la carte des paramètres http. La méthode setter correcte est déterminée pour définir la valeur et dépend de la version de Struts/OGNL pour trouver et invoquer correspondant à un nom l'accesseur de propriété. Comme vous avez d'abord un nom de propriété avec une lettre minuscule, il ne sera pas mis en majuscule pour calculer le nom de la méthode de réglage, mais dans les anciennes versions, l'algorithme est différent, donc vous devez soit ajouter la méthode de réglage correspondante à la version de Struts/OGNL ou renommer la propriété pour avoir au moins deux lettres minuscules au début. L'attribut property n'existe pas sur la balise <s:checkbox>, utilisez l'attribut name.

donc changer

<td><s:checkbox property="xBudgetFlag" name="xBudgetFlag" /></td> 

à

<td><s:checkbox name="xBudgetFlag" /></td> 
+0

Vous êtes vraiment génial .. cela a fonctionné avec setXBudgetFlag (Boolean xBudgetFlat) ... Encore je me demande pourquoi cela ne fonctionne pas avec setxBudgetFlag .. (petit x) qui est généré par Eclipse .. Quoi que ... Merci – user3682520

+0

La version de OGNL utilisée avec Struts 2.3.16 a un algorithme hérité pour déterminer un accesseur de méthode comme je l'ai mentionné dans cette réponse. Vous pouvez apprendre de [cette] (https://stackoverflow.com/a/28110630/573032) réponse pour en savoir plus sur les accesseurs de propriété. –