1

我希望将一个字符串从我的 Java 传递给一个 javascript showContent 函数。Java 和 javascript 都包含在 JSP 页面中。该字符串strLine包含我想使用 showContent 函数显示的 XML 内容。

我的爪哇

        try{    
        //Open the file that is the first command line parameter
            FileInputStream fstream = new FileInputStream(table.get(xmlMatch));                 

            // Get the object of DataInputStream
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;

        //Read File Line By Line
            while ((strLine = br.readLine()) != null)   
            {
                out.println (strLine);
            }  

Javascript(我必须感谢彼得在另一个问题中为我提供了这个)

<script type="text/javascript" language="JavaScript">
function showContent()
{
document.getElementById('showContent').innerHTML = "printed content";
}
</script>

我尝试将上述“打印内容”替换为"strLine"; (strLine);("strLine");

我还尝试使用和使用设置strLine为会话属性 ,但结果是 null 打印到屏幕上。session.setAttribute("strLine", strLine);"<%=strLine%>";

对此的任何帮助都会很棒。

的HTML

<a href="#" onclick="showContent()">Next! <%=keywords%> concept </a>
<div id="showContent"></div>
4

2 回答 2

3

out.println您应该放入一个变量(可能是一个 StringBuilder ),而不是用 打印它。为此,您必须:

在正确的范围内声明变量(可能在 JSP 的开头)

StringBuilder contentInnerHtml = new StringBuilder();

然后将文件的文本附加到这个新变量:

while ((strLine = br.readLine()) != null)   
{
    contentInnerHtml.append(strLine);
}

最后,在代码的 javascript 部分返回它的值(带toString()):

<script type="text/javascript" language="JavaScript">
function showContent()
{
    document.getElementById('showContent').innerHTML = "<%=contentInnerHtml.toString()%>";
}
</script>
于 2012-10-09T15:36:28.427 回答
0

如果您的 html 在您的 try/catch 块中,<%=strLine%>则应该可以正常工作。如果不是,那么将其分配为会话属性也可以,但是,您还需要从会话中访问它:

前任:

    try{    
    //Open the file that is the first command line parameter
        FileInputStream fstream = new FileInputStream(table.get(xmlMatch));                 

        // Get the object of DataInputStream
        DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String strLine;

    //Read File Line By Line
        while ((strLine = br.readLine()) != null)   
        {
%>
<div id="xxx"><%= strLine %></div>
<%
            out.println (strLine);
        }  

但这是非常丑陋的代码,难以阅读/调试。

    try{    
    //Open the file that is the first command line parameter
        FileInputStream fstream = new FileInputStream(table.get(xmlMatch));                 

        // Get the object of DataInputStream
        DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String strLine;

    //Read File Line By Line
        while ((strLine = br.readLine()) != null)   
        {
           session.setAttribute("strLine", strLine);  
           out.println (strLine);

        }  
  } // end of try
  catch( ... ){}
%>

<div id="xxx"> <%= session.getAttribute( "strLine" ) %></div>

但是,在第二种情况下,您只会显示文件的最后一行,所以我不完全确定您要完成什么。

如果您希望显示全文,也许您可​​以使用:

        StringBuffer strLineBuf;

    //Read File Line By Line
        while ((strLine = br.readLine()) != null)   
        {
            strLineBuf.append(strLine).append("<br/>");
        }  
        session.setAttribute( "strLine", strLineBuf.toString() );

然后在您的 try/catch 完成后,在您的 html 代码中:

  <div id="xxx"><%= session.getAttribute( strLine ) %> </div>
于 2012-10-09T15:39:44.073 回答