簡體   English   中英

支柱2“ <s:if> ”標記無法正常工作

[英]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" />:&nbsp;<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">&nbsp;</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>&nbsp;</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.

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