2011-10-06 64 views
2

這裏是我的代碼:的Struts 1個bean中的HTML標籤引用

<html:text name="rptData" property="emailAddress" onblur="checkIfEmpty('<bean:write name="rptData" property="status" />' , this.id)" /> 

這是嵌套在一個邏輯中:迭代標籤。我需要做的是將'status'的值傳遞給javascript checkIfEmpty方法。但我想報價中有一些錯誤。它工作不正常。請任何人指導我。謝謝。

回答

1

確定做了一些研究後,我發現了答案。

,如果我有一些像這樣的代碼:

<html:text styleId="emailAddress+<%=statusC.toString() %>" name="rptData" property="emailAddress" /> 

其輸出如下:

<input type="text" name="emailAddress" value="[email protected]" id="emailAddress+<%=statusC.toString() %>" /> 

但是,如果使用

<html:text styleId="<%=statusC.toString() %>" name="rptData" property="emailAddress" /> 

輸出爲:

<input type="text" name="emailAddress" value="[email protected]" id="Approved" /> 

這意味着沒有字符串連接輸出是正確的。即,僅使用

styleId="<%=statusC.toString() %>" 

而不是

styleId="emailAddress + <%=statusC.toString() %>" 

甚至

styleId="emailAddress" + <%=statusC.toString() %> - This results in an error, though 

yeilds正確的輸出。

因此,解決方法是首先在腳本中初始化一個完整的java字符串,然後在styleId標記中使用它。

<% String emailId = "emailAddress" + statusC.toString() ;%> 
<html:text styleId="<%=emailId%>" name="rptData" property="newEmailAddress" /> 

它會正常工作。乾杯!

0

你可能想嘗試同時使用雙引號雙引號加入一些轉義字符,如在你的情況下,將一些這樣的:

onblur="checkIfEmpty('<bean:write name=\"rptData\" property=\"status\" />' , this.id)" 
+0

我試過,但它沒有工作:( – HashimR

0

試試這個:

<html:text name="rptData" property="emailAddress" onblur="checkIfEmpty('<bean:write name=\'rptData\' property=\'status\' />' , this.id)" /> 
+0

不,不工作! – HashimR

1

你可以用」不會嵌套像這樣的定製標籤,而且大多數答案都意味着您可以這樣做,這是不幸的,因爲這代表了對JSP的基本誤解。

理想情況下,您不會使用<logic:iterate>標記,因爲當您使用JSTL時不推薦使用它:當JSTL和Struts 1標記功能重疊時,請使用JSTL選項。然後使用標準JSP EL來訪問變量。

<c:forEach items="listOfThings" var="current"> 
    ... 
    <html:text ... onblur="checkIfEmpty('${rptData.status}', ${current.id})" ... 
    ... 

在這個例子中我還假定this應該指當前迭代目的,在<c:forEach>標籤定義的。

+0

我的客戶要求是使用struts標籤。儘管謝謝你的回答! :) – HashimR

+0

你的客戶是...錯誤的頭腦。 –

+0

哈哈。是的,我知道這一點。 :p – HashimR