在HTML引号中使用Struts 1 bean标记

时间:2011-10-06 07:26:39

标签: html struts

这是我的代码:

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

这嵌套在 logic:iterate 标记内。我需要做的是将'status'的值传递给javascript checkIfEmpty 方法。但我猜引号中有一些错误。它工作不正常。请有人指导我。感谢。

4 个答案:

答案 0 :(得分: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>标签中定义的当前迭代对象。

答案 1 :(得分:1)

在做了一些研究之后我发现了答案。

如果我有这样的代码:

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

其输出如下:

<input type="text" name="emailAddress" value="abc@gmail.com" id="emailAddress+<%=statusC.toString() %>" />

但如果我使用

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

输出是:

<input type="text" name="emailAddress" value="abc@gmail.com" id="Approved" />

这意味着没有字符串连接,输出是正确的。即仅使用

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

而不是

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

甚至

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

yeilds正确的输出。

因此,解决方法是首先在scriplet中初始化一个完整的java String,然后在styleId标记内使用它。

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

它会正常工作。干杯!

答案 2 :(得分:0)

你可能想尝试在双引号内使用双引号时添加一些转义字符,就像你的情况一样,它会是这样的:

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

答案 3 :(得分:0)

试试这个:

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