如何在Java类中触发JavaScript函数?

时间:2014-02-09 06:09:41

标签: java jsp

我有一个JSP和一个可以互相协作的Java类。

我的Java类中有一个布尔变量。 如果其值已更改为true,我想一直使用AJAX检查它。 JavaScript警报会显示一条消息。

在JSF中,有类似的东西:

<h:outputScript rendered="#{categoryBean.showCategoryNameAlert}">
    alert("CategoryName already exist!");
 </h:outputScript>

但我不知道如何在JSP中做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用以下示例。

前端部分:

<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">

<title></title>

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
    setInterval(function(){
        $.get('/backEnd',function(responseText) {
           if(responseText == 'true') {
              alert("Variable has been set");
           }                
        });
    },1000);
});
</script>
</head>

<body>
</body>

</html>

后端部分:

@WebServlet(name = "checkerServlet", urlPatterns = { "/backEnd" })
public class CheckerServlet extends HttpServlet {
    private YourClass yourClass;

    @Override
    public void init() {
       yourClass = new YourClass();
    }       

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        
        response.setContentType("text/plain");
        PrintWriter writer = response.getWriter();

        if(yourClass.getBooleanValue) {
           writer.write("true");                
        } else {
           writer.write("false");
        }

        writer.close();
    }

    @Override
    protected void doPost(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
         doGet(request, response);
    }   
}

具有boolean变量的类的示例 -

public class YourClass {
   private static boolean booleanValue = false;

   public void setBooleanValue() {
      booleanValue = true;
   }

   public void resetBooleanValue() {
      booleanValue = false;
   }

   public boolean getBooleanValue() {
      return booleanValue;
   }   
   ...
}

如果您没有使用servlet,可以使用此调用:

<%@ page import="fullpackagename.YourClass" %>
<jsp:useBean id="yourClass" scope="request" class="fullpackagename.YourClass" />

<% 
   YourClass yourClass = new YourClass();
   // check your variable here
%>

将其添加到表示层。

自动刷新代码:

<%response.setIntHeader("Refresh", 1); %>

答案 1 :(得分:0)

你需要一个监听特定网址的servlet。给它“/ check”。

在servlet中:

if(category.categoryName != null) // or any thing you want
    out.write("true");  // out is response outputstream

在jsp中:ajax请求始终请求“/ check”并在看到true时发出警告。