【问题标题】:Sending Java String to JavaScript Function in JSP在 JSP 中将 Java 字符串发送到 JavaScript 函数
【发布时间】:2015-08-14 16:35:57
【问题描述】:

我正在尝试将 Java 字符串作为 JavaScript 函数的参数传递。是的,我知道 Java 和 JavaScript 不一样,但我在 .jsp 中使用了 scriplets。

我需要一种方法来访问此 JavaScript 函数中动态创建的 java Scriplet 对象 (componentTypePK)。我认为最好的方法是将 Java Scriplet 对象传递给 JavaScript 函数,但我收到了下面描述的错误。

这是我的 JavaScript 函数:

<script LANGUAGE="JavaScript">
    function showFormsInUse(componentTypePk){
         window.open('/showFormsInUse.do?<%="documentTypePk="+request.getParameter("documentTypePk")+"programAreaPk="+request.getParameter("programAreaPk")+"ComponentTypePK="+componentTypePk');   
    }
</script>

这里是我调用 JavaScript 函数的地方,它传入一个 Java 字符串作为参数。

<% if(getOppList(context,componentType.getString("ComponentDef_pk")).length()>1){%>
    <TD CLASS="ListCode">
        <IMG onclick="showFormsInUse(<%=componentType.getString("ComponentDef_pk")%>)" SRC="images/check.gif" TITLE="<%=getOppList(context,componentType.getString("ComponentDef_pk"))%>" WIDTH="16" HEIGHT="15" BORDER="0">
    </TD>
<% }else{%>
    <TD CLASS="ListCode">
        <IMG SRC="images/check.gif" TITLE="<%=getOppList(context,componentType.getString("ComponentDef_pk"))%>" WIDTH="16" HEIGHT="15" BORDER="0">
    </TD>
<%}%>

我不希望在我的脚本之前初始化 Java 字符串,然后将该字符串传递给 Javascript 变量 this。我也知道Java Scriplets are bad form,所以我很想知道我是否可以使用 JSTL 来解决这个问题。

更新:当我尝试运行和编译此代码时,我得到以下信息:

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 77 in the jsp file: /documentForms.jsp
Invalid character constant
74: 
75: <script LANGUAGE="JavaScript">
76:     function showFormsInUse(componentTypePk){
77:          window.open('/showFormsInUse.do?<%="documentTypePk="+request.getParameter("documentTypePk")+"programAreaPk="+request.getParameter("programAreaPk")+"ComponentTypePK="+componentTypePk');   
78:     }
79: </script>

总而言之,有没有办法将 Java 对象传递给 JavaScript 函数?

【问题讨论】:

    标签: javascript java jsp jstl


    【解决方案1】:

    String ComponentTypePKJS 不是有效的 JS,我什至不确定您要在这里做什么。我不确定您为什么不将请求参数公开为 EL 可访问的普通 JSP 属性,大致如下:

    window.open('/showFormsInUse.do?documentTypePK=${documentTypePk}&programAreaPk=${programAreaPk}&ComponentTypePk=' + componentTypePk);
    

    请注意,您需要确保所有内容都正确转义,但无论如何您都需要这样做。

    【讨论】:

    • 我更新了这个问题,希望能更清楚
    • @Turtle 不能将 Java object 传递给 JS 函数; Java是服务器端的。您可以按照我所说的将对象的字符串表示形式传递给 JS 函数,因为您应该只在运行 servlet/controller/whatever 之后才访问 JSP。您可以通过令人发指的 scriptlet 或 JSP EL 构建将发送给客户端的 JS 代码,尽管 scriptlet 基本上是邪恶的。
    【解决方案2】:

    在第 77 行,您打开了一个 scriplet 标记,但我看不到相同的结束标记。

    '/showFormsInUse.do?<%="documentTypePk="+request.getParameter("documentTypePk")+"programAreaPk="+request.getParameter("programAreaPk")+"ComponentTypePK= %>"+componentTypePk'
    

    我还建议你将所有的 scriplet 标签保留在 jsp 中,并有一个干净的 js 代码。

    <% if(getOppList(context,componentType.getString("ComponentDef_pk")).length()>1){%>
    <TD CLASS="ListCode">
        <IMG onclick="showFormsInUse(<%=request.getParameter("documentTypePk")%>,<%=request.getParameter("programAreaPk")%>,<%=componentType.getString("ComponentDef_pk")%>)" SRC="images/check.gif" TITLE="<%=getOppList(context,componentType.getString("ComponentDef_pk"))%>" WIDTH="16" HEIGHT="15" BORDER="0">
    </TD>
    

    Js

    <script LANGUAGE="JavaScript">
    function showFormsInUse(documentTypePk,programAreaPk,componentTypePk){
         window.open('/showFormsInUse.do?documentTypePk='+documentTypePk+'programAreaPk='+programAreaPk+'ComponentTypePK='+componentTypePk);   
    }
    

    【讨论】:

      猜你喜欢
      • 2016-11-13
      • 2014-07-09
      • 1970-01-01
      • 2019-11-17
      • 2014-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      相关资源
      最近更新 更多