簡體   English   中英

將值傳遞給Action類方法時,變量值將為null

[英]variable value is taking as null when the value is passed to the Action class method

在我的jsp文件中,設置變量statusNum的值。 當我嘗試將statusNum的值statusNum給方法getStatusString() (此方法在Action類中定義)時, statusNum值為null。 但是,當我使用${statusNum}顯示時,我會得到該值。 這是我的代碼。

<table style="width: 100%;">   
 <s:iterator value="emailList">
   <tr>
     <td style="width:39%"><s:property value='name'/></td>
     <td style="width:39%;"><s:property value='email'/></td>
     <s:set var="statusNum"><s:property value="status"/></s:set>
      ${statusNum} 
     <s:set var="stringNum" value="%{getStatusString(#statusNum)}"/>
  </tr>
 </s:iterator>
</table>

這是Action類中的getStatusString()方法的框架

public String getStatusString(Integer sendStatus) {
      ------------- 
      ------------- //code returning string value
      -------------         
}

請幫助我通過getStatusString()方法獲取與statusNum相對應的狀態字符串值。

您應該嘗試使用<s:property value="%{getStatusString(#statusNum)}"/>標記來調用操作方法。

Anwyay ...在我看來,這不是一個很好的選擇...為什么要在jsp中調用動作方法,並將業務層與表示層混合在一起?

在控制器內移動所有內容並僅使用jsp呈現結果會更容易。

我的意思是……您要在兩個不同的階段分割單個操作。 您的操作是創建一個名為emailListCollection然后在jsp中迭代您的collection。 在迭代時,您調用一個方法來獲取狀態字符串。


工作流程 :操作-> jsp->迭代-> {method xn}->結果


您為什么不在操作中准備該狀態字符串? 這樣,您只需打印值,堆棧中就不會充滿“垃圾”(如果可以這樣說的話)。


工作流程 :操作-> jsp->迭代->結果


<table style="width: 100%;">   
  <s:iterator value="emailList">
     <tr>
       <td style="width:39%"><s:property value='name'/></td>
       <td style="width:39%;"><s:property value='email'/></td>
       <td style="width:39%;"><s:property value='statusString'/></td>
     </tr>
  </s:iterator>
</table>

如果該字符串可能隨時間變化,請使用Ajax。 為了使您的頁面始終保持刷新狀態,並且安全得多。

我不確定為什么它不起作用,但是由於它是數字,所以您應該這樣做

<s:set var="statusNum" value="status"/>

代替

<s:set var="statusNum"><s:property value="status"/></s:set>

將其用作HTML,因此用作String。

IlGala是正確的,您應該在控制器上或在emailList bean上執行此emailList ,但是您也可以使用此答案中描述的其他技巧:

迭代emailList對象,並在不傳遞任何參數的情況下調用action方法:

<s:iterator value="emailList">
  <tr>
     <td> <s:property value='name'/>                    </td>
     <td> <s:property value='email'/>                   </td>
     <td> <s:property value="status"/>                  </td>
     <td> <s:property value="statusStringByStatusNum"/> </td>
  </tr>
</s:iterator>

然后在action方法中從“值堆棧”中檢索當前迭代的對象,並從那里獲取所需的參數:

public String getStatusStringByStatusNum(){
    EmailBizObj currentlyIteratedObj = 
                             (EmailBizObj) ActionContext.getContext().getValueStack().peek();
    Integer sendStatus = currentlyIteratedObj.getStatus();
    return ...; // do here what you need with your sendStatus and your Email object.
}

暫無
暫無

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

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