当前位置: 首页 > 知识库问答 >
问题:

有没有一种简单的方法来添加struts1.3html style leId属性而不接触每个元素?

穆季萌
2023-03-14

我目前正在使用遗留代码,试图让它在较新的浏览器中正确工作。该代码是用Struts 1.3编写的,并以以下方式广泛使用html标记库:

<html:text property="myTextInput" maxlength="10"/>

它在呈现时生成以下html:

<代码>

在旧版本的IE中,可以使用文档。getElementById('myTextInput')获取引用,即使该元素只有名称属性,并且没有id属性。使用jsp html标记时,name属性在html代码中生成name属性,但不生成id属性。

我发现在jsp中的html标签中添加style leId确实会将id属性添加到生成的xml中,但这意味着我必须触摸所有jsp中的每个html标签元素,并将其更改为类似于:

<html:text property="myTextInput" styleId="myTextInput" maxlength="10"/>

我还发现了document.getElementByName(),但是这导致了大量的javascript,而且(由于错误的代码),我不知道它是否真的引用了idname的元素,所以这可能会导致一些问题。

有没有一种简单的方法可以添加styleId属性而不必触及每个元素?

共有1个答案

公孙向荣
2023-03-14

最后,我编写了一个小型java main方法来处理这个问题。我使用regex查找html元素(selectoptiontexthiddentextarea),这些元素还没有styleId属性,然后添加styleId属性,其值与属性属性相同。这可以扩展为一次处理一堆文件,但现在我只想处理单个文件,这样我就可以轻松地对照源代码管理检查它们,确保它正常工作。这是一个快速而肮脏的问题解决方案,因此我不必手动梳理成吨的jsp文件,因此我确信它不会处理一些边缘情况。话虽如此:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class JspModifierStyleId {

    public static void main(String[] args) throws IOException {
        String lineEnding = "\r\n";
        String baseDir= "C:/path/to/your/directory/";   //Change this to suit your directory

        String origFileName= "OriginalFile.jsp";  //Change this to suit your original file that needs the attribute added
        File origFile = new File(baseDir + origFileName);

        String tempFileName = "TemporaryFile.jsp";
        File tempFile = new File(baseDir + tempFileName);

        Pattern p = Pattern.compile("^(?!.*styleId)\\s*<html:(?:select|option|text|hidden|textarea)\\s.*property=\"([a-zA-Z1-9.]*)\".+");

        FileReader in = new FileReader(origFile);
        FileWriter out = new FileWriter(tempFile);

        BufferedReader br = new BufferedReader(in);
        BufferedWriter bw = new BufferedWriter(out);


        String line;
        while ((line = br.readLine()) != null) {
            Matcher m = p.matcher(line);
            if(m.matches()){
                String strWithStyleId = line.substring(0, m.start(1)) + m.group(1) + "\" styleId=\"" + line.substring(m.start(1));
                bw.write(strWithStyleId + lineEnding);
                System.out.println(strWithStyleId);
            }else {
                bw.write(line + lineEnding);
            }
        }

        br.close();
        bw.close();

        //copies back to original file, BE CAREFUL!!! 
        copyFile(tempFile, origFile);
    }

    public static void copyFile(File sourceFile, File destFile) throws IOException {
        if(!destFile.exists()) {
            destFile.createNewFile();
        }

        FileChannel source = null;
        FileChannel destination = null;

        try {
            source = new FileInputStream(sourceFile).getChannel();
            destination = new FileOutputStream(destFile).getChannel();
            destination.transferFrom(source, 0, source.size());
        }
        finally {
            if(source != null) {
                source.close();
            }
            if(destination != null) {
                destination.close();
            }
        }
    }
}
 类似资料:
  • 但我对它并不完全满意,主要有两个原因 我“滥用”了函数。在Stream API中,每个函数都有其明确、明确的用途:被认为是计算最大值,被认为是根据条件进行筛选,被认为是生成增量累加的值,等等。 这样做会阻止我使用Streams强大的机制:如果我想将搜索限制在前两个结果上怎么办? 这里我使用了,因为(据我所知)它是唯一一个允许比较两个值的函数,而这些值可以在某种程度上导致类似于“当前值”和“下一个值

  • 有没有一种简单的方法可以在访问流中的索引的同时对流进行迭代? 这与上面给出的LINQ示例相比似乎相当令人失望 有没有更简洁的方式? 而且,拉链似乎不是动了就是被拆了...

  • 问题内容: 假设我们有这个流 我想在地图中保存几对相邻的字符串,其中第一个以“ err”开头。 我想到的就是这样 但是我对它并不完全满意,主要有两个原因 我在“滥用” 功能。在Stream API中,每个函数都有其明确的定义明确的目的:应该计算最大值,应该根据条件进行过滤,应该产生递增的累加值,依此类推。 这样做会使我无法使用Streams强大的机制:如果我想将搜索范围限制在前两个结果中,该怎么办

  • 问题内容: 上面显示了以下错误: 因此,我必须这样做: 但是,没有简单的方法可以做到这一点吗? 问题答案: 要删除列表中元素的首次出现,只需使用: 请注意,它不会删除所有出现的元素。为此使用列表理解。

  • 问题内容: 我有一个这样的html代码段: html中此元素的唯一唯一标识是attribute ,因此我想使用 某种 Pythonselenium 方法 来定位它,如下所示: 我已经检查了selenium(python)文档以查找元素, 但是没有获得关于如何通过attr 定位此elem的线索。有没有在pythonselenium中找到该元素的明确方法? 问题答案: 您可以 通过xpath 获取它并

  • 问题内容: 我正在建立一个带有flask的网站,其中用户具有帐户并能够登录。我正在使用flask-principal作为登录部分和角色管理。有没有办法让用户的会话在5分钟或10分钟后过期?我在flask文档或flask-principal文档中找不到该文件。 我想到了一种手动方法,在登录时在服务器端设置一个带有时间标签的变量,并在用户执行下一个操作时,服务器会验证该时间戳记上的时间增量并删除会话。