[英]Struts 2 “<s:if>” tag doesn't work as expected
以下是我的jsp中的代码片段,其中包含一个struts“ if”标签。
<s:if test="(isVetRequired.equals(true) && isVetValidationRequired())">
<div id="validateVetDiv">
<table width="100%" border="0" cellspacing="1">
<tr style="vertical-align: top;">
<td width="30%"><s:text name="label.vet.certificate" />: <span class="req_field">*</span></td>
<td width="35%">
<!-- <s:select
cssClass="txt290"
list="#{'CleanCo Lanka (Pvt) Ltd':'CleanCo Lanka (Pvt) Ltd', 'Laugfs Eco Sri (Pvt)':'Laugfs Eco Sri (Pvt)', 'Drive Green (Pvt) Ltd':'Drive Green (Pvt) Ltd'}"
name="vetCompany" id="vetCompany" headerKey="-1"
headerValue="%{getText('select.vet.company')}" /> -->
<s:select
cssStyle="width: 95%;"
list="vetCompanyList" listKey="name" listValue="name"
name="vetCompany" id="vetCompany" headerKey="-1"
headerValue="%{getText('select.vet.company')}" />
</td>
<td width="35%">
<div align="left"><s:submit name="butValidateVet"
action="validateVet" id="butValidateVet"
value="%{getText('label.validate')}" /><span class="style3"
id="vetCert"><label> <s:if
test="vetValidityStatus == null"> </s:if><s:elseif
test="vetValidityStatus == @lk.icta.erl.action.RevenueLicenseIssuanceServiceAction@VALIDATION_STATUS_VALID">
<label class="label_valid_certificate"><strong><s:property
value="getText('message.valid.status')" /></strong></label>
</s:elseif> <s:elseif
test="vetValidityStatus == @lk.icta.erl.action.RevenueLicenseIssuanceServiceAction@VALIDATION_STATUS_INVALID">
<label class="label_invalid_certificate"><strong><s:property
value="getText('message.invalid.status')" /></strong></label>
</s:elseif></label></span></div>
</td>
</tr>
<tr> </tr>
</table>
</div>
</s:if>
isVetValidationRequired()在操作类中。 该方法的实现如下所示。
public boolean isVetValidationRequired(){
boolean isVetRequired = true;
Fuel fuel = ((Vehicle) getSession().get(
SessionConstants.SESSION_VEHICLE)).getFuel();
fuelId = fuel.getFuelId();
if (fuelId == 4 || fuelId == 5) {
isVetRequired = false;
}
return isVetRequired;
}
问题在于if标记处的条件总是评估为false并且该表不显示。 我调试了系统,发现从方法返回的值是true。 桌子仍然没有出现。 这可能是什么原因?
先感谢您。
<s:if test="(isVetRequired.equals(true) && isVetValidationRequired())">
这将寻找public boolean isVetRequired;
或public boolean isVetRequired() { return isVetRequired; }
public boolean isVetRequired() { return isVetRequired; }
。
由于您的变量是私有变量,因此
public boolean isVetValidationRequired(){
boolean isVetRequired = true;
Fuel fuel = ((Vehicle) getSession().get(
SessionConstants.SESSION_VEHICLE)).getFuel();
fuelId = fuel.getFuelId();
if (fuelId == 4 || fuelId == 5) {
isVetRequired = false;
}
return isVetRequired;
}
您必须从方法中提取该变量,并在Class中将其声明为private
,然后添加Getter。
最后, is/get/set
由框架自动处理,因此使用
<s:if test="(vetRequired == true && vetValidationRequired == true)">
顺便说一下,您的代码很奇怪...由于您仅基于vetRequired值返回vetValidationRequired,因此应将其更改为以下内容:
private boolean isVetRequired;
public boolean isVetRequired() {
return isVetRequired;
}
public String execute(){
isVetRequired = true;
Fuel fuel = ((Vehicle) getSession().get(
SessionConstants.SESSION_VEHICLE)).getFuel();
fuelId = fuel.getFuelId();
if (fuelId == 4 || fuelId == 5) {
isVetRequired = false;
}
return "success";
}
和这样的测试:
<s:if test="vetRequired">
<!-- STUFF -->
</s:if>
test="%(isVetRequired.equals(true) && isVetValidationRequired())"
请让您的布尔变量不同于它的getter方法。
private boolean isVetRequired; // Wrong way
将其设为private boolean vetRequired;
从变量名中删除is
因为它与您的getter方法冲突。
<s:if test ="vetRequired">
</s:if>
现在应该可以了。 要了解更多,您可以关注我 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.