簡體   English   中英

提交表單后,Struts 2 操作的布爾值未從 JSP 綁定

[英]Struts 2 action's Boolean value is not binding from JSP after submitting the form

在 JSP 中,只有Boolean值沒有綁定到動作的Boolean變量中。 其他所有變量都綁定得很好。 xBudgetFlag是沒有綁定的Boolean變量。 其他所有變量都是綁定的。

早些時候從 action 到 JSP 也不起作用,在為xBudgetFlag添加多個 getter xBudgetFlag它工作正常。

@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;
}
}

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

嘗試使用其他設置器名稱

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

提交表單后,將調用setter方法以從http參數映射中填充動作類變量。 確定了正確的setter方法來設置值,並且它取決於Struts / OGNL的版本來查找和調用與屬性訪問器名稱對應的名稱。

由於您的屬性名稱首先帶有一個小寫字母,因此不會大寫來計算setter方法的名稱,但是在較早的版本中,算法是不同的,因此您必須添加對應於的版本的setter方法Struts / OGNL或將屬性重命名為首先至少包含兩個小寫字母。

另外, <s:checkbox>標記上不存在property屬性,請使用name屬性。

所以改變

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

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

羅馬C,您真的很棒。.它與setXBudgetFlag(Boolean xBudgetFlat),大寫字母X ..一起使用。.我仍然想知道為什么它與由Eclipse生成的setxBudgetFlag ..(小x)不兼容。羅馬C

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM