在Java中将Java字符串发送到JavaScript函数

时间:2015-08-14 16:35:57

标签: javascript java jsp jstl

我正在尝试将Java String作为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 String作为参数。

<% 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字符串,然后将该String传递给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 Object传递给JavaScript函数?

1 个答案:

答案 0 :(得分:1)

在第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);   
}