2010-12-22 34 views
2


我已經使用c:forEach標記填充了一些值。我想要在JavaScript中獲取這些值。
如果我點擊GetCtag值按鈕,那麼我想從(c:for each)javascript中讀取值。是可能的:javascript提取值從c:forEach標記?

是任何其他路檢索C:forEach標記值

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> 
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> 
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>  
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 

<f:view> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

     <script type="text/javascript"> 

     function getCTagValue(ctagObject) 
     { 
      alert("CFor Each Tag Object Value: " + ctagObject); 
      // Here i want write code for retrieve the c:forEach tag value 
     } 

</script> 
</head> 
    <body> 
     <h:form id="cTagForm" >    

      <c:forEach items="${cTagBean.tagList}" var="ctag"> 
       <c:out value="${ctag.name} : "/> 
       <c:out value="${ctag.age}"/></br> 
      </c:forEach> 

      <a4j:commandButton id="GetCtagId" value="GetCtag" oncomplete="getCTagValue('#{cTagBean.tagList}')"/> 

     </h:form> 
    </body> 
</html> 

幫助我。 在此先感謝。

回答

4

就打印在JavaScript語法而不是HTML語法。

<script> 
    var data = { 
     <c:forEach items="${cTagBean.tagList}" var="ctag" varStatus="loop"> 
      '${ctag.name}': ${ctag.age}${!loop.last ? ',' : ''} 
     </c:forEach> 
    }; 
</script> 

因此,它最終成爲有效的JavaScript對象(假設name回報Stringage回報Number):

<script> 
    var data = { 
     'foo': 10, 
     'bar': 5, 
     'waa': 20 
    }; 
</script> 
1

只有JavaScript可以訪問HTML中的數據,因爲它是由瀏覽器看到。

我建議的方法是生成JSON(但是你的Web-API允許),並將其存儲在JavaScript代碼 - 也許是一個全球性的。當然,保持這些數據「接近」它的使用位置是可取的,但同樣如此。另一種方法是使用自定義HTML屬性(希望從HTML5合規性的「數據」開始)。

+0

正確的。作爲提示,請嘗試在瀏覽器頁面上查看源代碼。任何你找不到的東西都不可用於JavaScript。 – 2010-12-22 09:00:32

+0

@ DavidMårtensson:感謝您的迴應 – Eswar 2010-12-22 10:17:00

0

我得到了解決方案。

<a4j:commandButton id="GetCtagId" 
        value="GetCtag" 
        data="#{cTagBean.tagList}" 
        oncomplete="getCTagValue(data)"/> 

然後,

function getCTagValue(data) 
{      
    for(var i=0; i<data.length; i++) 
    { 
     alert("Month : " + data[i].name); 
     alert("Value : " + data[i].age); 
    } 
} 
0
<script> 
     var data = new Array();  
     <c:forEach items="${cTagBean.tagList}" var="ctag" varStatus="loop"> 
      data.push(${ctag.name});   
     </c:forEach> 
</script>