提交表单后,Struts2操作的布尔值不会从JSP绑定

时间:2017-05-27 15:09:50

标签: java jsp struts2 ognl

从JSP开始,只有布尔值没有绑定到action的布尔变量中。其他所有变量都得到了很好的绑定。 xBudgetFlag是布尔变量,它不绑定。其他所有变量都是绑定的。 从早期的行动到jsp也没有奏效,为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>

如果需要,请告诉我更多信息。

2 个答案:

答案 0 :(得分:1)

尝试使用其他设置者名称

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

提交表单时,调用setter方法从http参数映射填充操作类变量。确定正确的setter方法来设置值,它取决于Struts / OGNL的版本来查找和调用对应于属性访问者的名称。

由于您的属性名称首先是一个小写字母,因此不会大写来计算setter方法的名称,但在旧版本中算法不同,因此您必须要么添加对应的setter方法Struts / OGNL的版本或重命名该属性,首先至少有两个小写字母。

property标记上也不存在<s:checkbox>属性,请使用name属性。

所以改变

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

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

答案 1 :(得分:0)

Roman C,你真的很棒..它适用于setXBudgetFlag(布尔值xBudgetFlat),大写字母X ..我仍然想知道为什么它不适用于由eclipse生成的setxBudgetFlag ..(小x) ..无论如何..谢谢Roman C