通常,当我使用struts 2标签时,页面的加载显然是不完整的,因为struts 2标签中的单引号或双引号字符干扰了javascript中的这些字符。
我非常渴望开展工作的一个例子如下:
var me = '<s:a href=\'http://www.google.com\'>Google Link</s:a>';
$('#appnSelect').html(me);
所以我关心的是当单行和双引号位于第1行右侧的字符串内部时。最终,我需要让<s:select>
起作用,但这个问题似乎随之而来许多标签,如上例所示。将<s:a>
标记替换为<a>
标记,瞧,它有效。但是,当展开<s:a>
标记时,页面将不完整加载。
我遗失的地方有一个简单的解决方案吗?我尝试过的一件事是使用主题属性设置theme =“simple”,因为有时在输出被错误渲染时会帮助我。在这种情况下,这不起作用。
答案 0 :(得分:1)
从JavaScript字符串常量中间的标记生成HTML总是一件丑陋的事情。除了引号字符外,您还可能会获得换行符。严格来说,你不知道你会得到什么,你无法控制它。
有一件事是您可以将标记放入标记为非JavaScript类型的虚拟<script>
块中:
<script id='anAnchor' type='text/html'>
<s:a href='http://www.google.com'>Google Link</s:a>
</script>
浏览器不会尝试执行该操作。然后,您可以在JavaScript代码中执行此操作:
$('#appnSelect').html($('#anAnchor').html());
答案 1 :(得分:1)
什么应该用很少的思考工作:
<s:a id="google" style="display: none;" href="www.google.com">Google Link</s:a>
现在只需使用脚本中的id抓取元素即可。如果你上课,可能会更好。所有struts2标签都有id,style和class属性。
答案 2 :(得分:0)
我认为问题在于您在<s:a>
标记内转出单引号。根据我使用<s:url>
的经验,我做了以下几点:
var url = "<s:url value='/someAction.action' />"
我认为同样的语法应该适用于<s:a>
。
此外,查看JSP容器的错误日志,看看是否可以找到与该<s:a>
标记相关的错误。这可能会为问题提供一些额外的见解。
答案 3 :(得分:0)
这是我的答案,这不是最好的答案,因为Pointy的回答指出了我正确的方向。然而,投票仍然赞赏:)
首先,您需要未呈现的脚本块。我有2,因为复选框将在显示哪一个之间切换:
<script type="myType" id="abc">
<s:select name="selectName" list="#list1" listValue="%{prefix + '-' + name}" theme="simple"/>
</script>
<script type="myType" id="abc2">
<s:select name="selectName" list="#list2" listValue="%{prefix + '-' + name}" theme="simple"/>
</script>
接下来,我在html代码中创建一个空白的区域
<div id="innerRegion">
</div>
然后,我需要在页面首次出现时在屏幕上放置一些东西,所以请按照下面这样说:
<script type="text/javascript">
$(document).ready(function(){
$('#innerRegion').html( $('#abc').html() )
});
我需要把它放在我的文档的末尾,因为onLoad已经被父页面使用了。所以我说abc是正确的默认值。
然后我需要逻辑来处理按下复选框时发生的事情:
var buttonPressed = false;
$(window).load(
function()
{
LocalInit();
});
function LocalInit() {
$('#myForm input[name=buttonValue]').change(
function()
{
buttonPressed = !buttonPressed;
if (buttonPressed == true)
{
$('#innerRegion').html( $('#abc2').html() )
} else
{
$('#innerRegion').html( $('#abc').html() )
}
$('#dataId').href = document.location.href;
}
);
}
我认为最终绊倒我的是我试图通过jQuery函数强制执行s:select标记,如上所示它并不是必要的。我可以写s:选择正常。