[英]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創建對象的正確方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.