在 Struts 2 中提交表单后,Action 的布尔值不再与 JSP 绑定

问题描述 投票:0回答:1

在 JSP 中,只有

Boolean
值未绑定到操作的
Boolean
变量中。其他所有变量都绑定得很好。

xBudgetFlag
Boolean
变量,不具有约束力。 其他所有变量均具有约束力。

早期从 Action 到 JSP 也不起作用,在为

xBudgetFlag
添加多个 getter 之后,它工作正常。

@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>
java jsp binding struts2 ognl
1个回答
2
投票

尝试使用其他设置器名称

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>
© www.soinside.com 2019 - 2024. All rights reserved.