我在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>
我按照本页面上的评论:Create Struts2 tag inside JavaScript function并且我在一个JSP中的一个struts标记中包含了我的JS。
任何人都会看到我可能做错了什么,或者是否有更好的方法可以解决这个问题?
我使用文本字段作为示例,但最后我想创建一个<s:select>
标记。
要明确说明我想要做什么:我正在尝试动态创建一个元素,如果一个标志基本上设置为true。因此,如果该标志为true,则创建一个在我的struts类中使用列表的标记,否则使用普通的ol'文本字段。
我在我的示例中使用了一个文本字段,看看我是否可以使用struts标记。
答案 0 :(得分:0)
引用你所链接的答案:
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块中的escapeJavascript="true"
标签中使用<s:property />
,否则您将容易受到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;
应该让你更接近你想要实现的目标。
P.S:innerHTML很快,但不是在Javascript中创建对象的正确方法。