簡體   English   中英

無法在JSP腳本標記內創建Struts2標記

[英]Unable to create Struts2 tags inside JSP script tag

我在JSP頁面的<s:param>標記內有一些javascript。

我想創建一個struts2標簽給定的條件為真。 這是我所擁有的:

<s:param name="pageScript">
  <script type="text/javascript">
  $(document).ready(function() {
      if(translateField === "true") {
        var declaredValue;
        declaredValue= document.createElement("div");
        declaredValue.innerHTML = '<s\:textfield label="HELLO" \/>';              
      } else {
        var declaredValue = document.createElement("input");
        declaredValue.type = "text";
        declaredValue.id = "declaredValueInput";
        declaredValue.value = "some value";
      }
  });
  </script>
</s:param>

我遵循了此頁面上的注釋: 在JavaScript函數中創建Struts2標簽,並將JS放在struts標簽內的JSP中。

有人看到我可能做錯了什么,或者是否有更好的解決方法?

我以文本字段為例,但最后我想創建一個<s:select>標記。

為了明確說明我想做什么:如果標志設置為true ,則我試圖動態創建一個元素。 因此,如果該標志為true,則在我的struts類中創建一個使用列表的標簽,否則使用純文本字段。

我在示例中使用的是文本字段,只是為了查看是否可以使用struts標記。

引用您鏈接的答案:

JS在客戶端執行。 JSP標記在服務器上評估。

這意味着,當瀏覽器的Javascript引擎開始讀取該Javascript片段時,不再存在Struts標記的痕跡,因為它們在呈現頁面之前就已經被轉換為HTML代碼。

您可以使用正確的語法將Struts標記注入JS,這將是

declaredValue.innerHTML = '<s:textfield label="HELLO" />';              

,那么您將遇到一個問題,即生成的HTML不會被清理為包含在Javascript字符串中( '"等)。但這是您真正需要的嗎?您不能簡單地存儲"HELLO"文本,然后生成一個HTML <input type="text" />上自己的?

就像是:

var text  = '<s:text name="HELLO" />';

或(請記住,請在JS塊內的<s:property />標記中使用escapeJavascript="true" ,否則您將容易受到XSS攻擊):

var text  = '<s:property value='getText("HELLO")' escapeJavascript="true" />';

接着

var label = '<label for="hello">' + text + '</label>';
var input = '<input type="text" id="hello" />';
declaredValue.innerHTML = label + input;

我想,這應該使您更接近要實現的目標。

PS:innerHTML速度很快,但不是用JavaScript創建對象的正確方法。

struts2

[英]struts2 <s:url in html script tag not working

暫無
暫無

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

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