【问题标题】:Keep JSPX from creating self closing tags (<div></div> != <div/>)防止 JSPX 创建自闭合标签 (<div></div> != <div/>)
【发布时间】:2010-10-11 15:43:49
【问题描述】:

JSPX 有一个可爱的转弯效果:

<div class="magic"></div>

进入:

<div class="magic" />

对于许多浏览器,即使它是有效的 XHTML,这也会导致混乱和布局混乱。 因此,我使用了一个 groovy 脚本来使用以下正则表达式查找所有可能的错误 HTML:

def m = html =~ /<(\w+)[^>]*?><\/(\w+)>/
def bad = m.findAll { it[1] == it[2]  };

有没有办法让 JSPX XML 处理器不自动关闭标签?

【问题讨论】:

  • For many browsers this causes pandemonium and mayhem with layout even though it is valid XHTML.,你是说IE吗? XHTML 在 Firefox 3 及更高版本、Safari 4 及更高版本、Google Chrome 和 Opera 上有效。我认为 IE8 没有通过 XHTML 标准。
  • @Gentleman 恐怕它也会在 Firefox 中引起混乱。
  • 奇怪,Firefox 怎么会受苦?
  • 我相信它影响的两个浏览器是Firefox和Opera。但是,我确实看到所有浏览器的 标签都有一些奇怪的行为。如今,对于 JQuery 和朋友来说,空标签很常见。

标签: java xml groovy jspx


【解决方案1】:

我一直在用&lt;div&gt;&lt;jsp:text/&gt;&lt;/div&gt;

【讨论】:

  • 非常感谢 Glenn Lane。 jsp:text/> 就像一个魅力。我使用dreamweaver创建了一个漂亮的布局,当我第一次在服务器上运行时,jspx通过添加自关闭标签并删除其他有效标签而搞砸了。
【解决方案2】:

AFAIK,对此没有优雅的解决方案(阅读:可在容器级别配置)。检查“jspx script element on GlassFish v3”以了解可能的解决方法。

【讨论】:

    【解决方案3】:

    您可以尝试在元素内指定不会影响 HTML 呈现方式的内容,但会阻止 XHTML 被序列化为自闭合元素;例如评论、处理指令或不间断的空白字符(&amp;#x200B;)。

    【讨论】:

    • 是的,我一直在使用 。所以
      似乎有效。
    【解决方案4】:

    正如尼姆所说,似乎没有解决这个问题的办法。 不过,我已经编写了一个 Groovy 脚本,您可以使用 Maven 调用 (GMaven) 来检查可能会自行关闭的 XHTML 标记。

    此脚本可能需要更好的错误消息,并且不能处理所有情况,但到目前为止已经缓解了问题。

    #!/usr/bin/env groovy
    
    
    def srcdir = project.properties['srcdir'];
    def badFiles = [];
    
    def checkFile(badFiles, file) {
        def htmlLines = file.readLines();
        def found = [];
        int i = 0;
        for (html in htmlLines) {
            ++i;
            //print html;
            def m = html =~ /<(\w+)[^>]*?><\/(\w+)>/
            def bad = m.findAll { it[1] == it[2]  };
            if (bad)
                found.add(['bad' : bad, 'line' : i]);
        }
        if (found) {
            badFiles << file;
            println "File had bad HTML: " + file.canonicalPath;
            println found;
        }
    
    }
    
    def ant = new AntBuilder();
    scanner = ant.fileScanner {
        fileset(dir:srcdir) {
            include(name:"**/*.jspx")
        }
    }
    
    for (f in scanner) {
        //println "Checking file: " + f.canonicalPath;
        checkFile(badFiles, f);
    }
    if (badFiles) { 
        println "Bad files: " + badFiles;
        fail('Bad files: ' + badFiles);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      相关资源
      最近更新 更多