Struts 2标签的扩展标记了页面的渲染

时间:2011-06-22 19:43:29

标签: javascript jquery struts2

通常,当我使用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”,因为有时在输出被错误渲染时会帮助我。在这种情况下,这不起作用。

4 个答案:

答案 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:选择正常。