[英]Mock method to return a value only when passed any *non-null* object of a given class
[英]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呈現結果會更容易。
我的意思是……您要在兩個不同的階段分割單個操作。 您的操作是創建一個名為emailList
的Collection
然后在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.