Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改从Java接收的HTML字符串的方法_Java_Javascript_Html_Jsp_Servlets - Fatal编程技术网

更改从Java接收的HTML字符串的方法

更改从Java接收的HTML字符串的方法,java,javascript,html,jsp,servlets,Java,Javascript,Html,Jsp,Servlets,我知道理想的HTML字符串应该总是在JSP中,而不是从Java文件返回。但在我的应用程序中,我的JSP从Java类接收HTML字符串 我的问题是,我可以动态修改该字符串,还是通过JSP中的一些代码来修改该字符串 例如,基于JSP中的某些条件,我可以将3列表结构转换为2列结构吗?在其他情况下,它将继续由Java类返回 多谢各位 如果你做得很好,你应该能够使用CSS改变布局。您的困难源于这样一个事实:您正在从一个服务接收HTML,它不应该知道或关心表示,并且它是以这样一种方式编写的,布局是固定的 如

我知道理想的HTML字符串应该总是在JSP中,而不是从Java文件返回。但在我的应用程序中,我的JSP从Java类接收HTML字符串

我的问题是,我可以动态修改该字符串,还是通过JSP中的一些代码来修改该字符串

例如,基于JSP中的某些条件,我可以将3列表结构转换为2列结构吗?在其他情况下,它将继续由Java类返回


多谢各位

如果你做得很好,你应该能够使用CSS改变布局。您的困难源于这样一个事实:您正在从一个服务接收HTML,它不应该知道或关心表示,并且它是以这样一种方式编写的,布局是固定的


如果CSS做不到这一点,您可以使用JavaScript和jQuery这样的好库来更改页面中的DOM,但在维护方面,您会讨厌自己。

您当然可以用Java来做。如果您的HTML字符串是有效的XML格式,则可以使用XML操纵来实现这一点

另一种选择可能是使用Javascript,并在客户端上更改HTML。jQuery使它变得非常简单


不过,在理想情况下,在应用程序中可以更好地分离关注点。返回HTML的Java类实际上应该只返回HTML中包含的基本信息,并让其调用者决定该信息的表示形式。

您所要求的本质是JSP变量。JSP变量表示为

如果我们上课的话

package com.blessedgeek.lyrics.server;

public class BengawanSolo {

  public String title = "Bengawan Solo";
  public int numCols = 1;
  public String[]
    ml = {
      "Bengawan Solo",
      "Riwayat mu ini",
      "Sedari dulu jadi",
      "perhatian insani"
      },

    en = {
      "Bengawan River",
      "Thus your history",
      "From of old you have been",
      "Of human/sentient attention"
    },

    he ={
      "הנהר בנגעון",
      "הקיום שלך",
      "מהזמנים המוקדמים אתה הפכה",
      "מוקד החיים"
    }
  ;

  public String[][] columns = {ml, en, he};

}
这首歌是印度尼西亚爪哇岛的一首印尼民歌《独孤河》的第一段歌词。您可以让用户从三种HTML布局中进行选择

  • 一个带有印尼歌词原件的专栏
  • 两列:第0列=印尼语,第1列=英语翻译
  • 第0列=印度尼西亚语,第1列=英语翻译,第2列=希伯来语翻译
  • 或者直接对查询执行正则表达式

    或者您可以使用“ref”而不是“id”附加到查询中。“id”定义变量。“ref”继续使用已定义的StringBuffer变量

    <hello:text ref="query" scope="session">
      AND stanza = 1
    </hello:text>
    
    
    和节=1
    
    当然,您可以首先使用常用的Java声明定义StringBuffer“query”,然后使用“ref”继续其引用,而不使用“id”启动它

    文本自定义标记示例

    <%@ taglib
    uri="/WEB-INF/text-taglib.tld" prefix="hello"%>
    
    <hello:text id="query" scope="session">
        SELECT <%=columns%>
        FROM Lyrics
        WHERE title="Bengawan Solo"
    </hello:text>
    
        <jsp:useBean class="com.blessedgeek.lyrics.server.BengawanSolo" id="lyric"/>
    
        <html>
        <head>
        <title><%=lyric.title%></title>
        </head>
        <%
          int numCols = lyric.numCols;
          try{
            String numColsParam = request.getParameter("numCols");
            if(numColsParam!=null)
              numCols = Integer.parseInt(numColsParam);
          }
          catch(Exception e){}
    
          String[][] queryResults = yourDbQuerier.submit(query.toString());
        %>
    
        <body>
    
    
    
    当需要将java Codelet嵌入到块中时,文本自定义标记非常有用。 您可能希望强调以下短语:

        <hello:text id="sheet" scope="session">
        These are the lyrics to the song "<%=title%>.
        If you like it jump <%=numCols%> times.
    
        <table>
          <%
    
          for (int row=0; row<queryResults[0].length; row++){
            %><tr><%
              for(int col=0; col<queryResults.length; col++){
                String line = queryResults[col][row];
                int k = line.replaceAll("riwayat", "<b>riwayat</b>");
                %><td><%=line%></td><%
              }
            %></tr><%
          }
          %>
        </table>
        </hello:text>
    
    
    这是这首歌的歌词。
    如果你喜欢,跳几次。
    
    并将“sheet”的内容输出到JSP的html响应中:

    <%=sheet%>
    </body>
    </html>
    
    
    
    从现有文件创建模板。

    当我需要将一个完整的文本文件作为输入编入大型机遗留应用程序中,以提取和按摩输出作为web服务的响应时,此文本自定义标记非常有用。其中,大型机应用程序的输入传统上是人工/电子表格/机器,由可变数量的输入列和行构成re是各种输入格式,太多而无法计数

    因此,它允许我以模板的形式从每种格式快速地复制现有的示例文件,然后插入允许特定于会话的变化所需的任何代码。因为我真的不喜欢将这些巨大的文件转换为数千个不连续的字符串变量声明

    (hello,hello gods of Java多行字符串声明何时可用,hello敲打敲打,任何响应??)

    请参阅我的博客文章,从google代码下载自定义标记:

    “只返回HTML中包含的基本信息”-完全正确,而且写得很好。
        <jsp:useBean class="com.blessedgeek.lyrics.server.BengawanSolo" id="lyric"/>
    
        <html>
        <head>
        <title><%=lyric.title%></title>
        </head>
        <%
          int numCols = lyric.numCols;
          try{
            String numColsParam = request.getParameter("numCols");
            if(numColsParam!=null)
              numCols = Integer.parseInt(numColsParam);
          }
          catch(Exception e){}
    
          String[][] queryResults = yourDbQuerier.submit(query.toString());
        %>
    
        <body>
    
        <hello:text id="sheet" scope="session">
        These are the lyrics to the song "<%=title%>.
        If you like it jump <%=numCols%> times.
    
        <table>
          <%
    
          for (int row=0; row<queryResults[0].length; row++){
            %><tr><%
              for(int col=0; col<queryResults.length; col++){
                String line = queryResults[col][row];
                int k = line.replaceAll("riwayat", "<b>riwayat</b>");
                %><td><%=line%></td><%
              }
            %></tr><%
          }
          %>
        </table>
        </hello:text>
    
    <%=sheet%>
    </body>
    </html>