在jsp中访问javascript变量值

时间:2013-12-23 16:45:18

标签: java javascript jsp servlets netbeans

我想将一个javascript变量传递给我的servlet,我需要在其中使用它。

在javascript中,变量 count 返回我的表的行,我可以使用$('#counter').html(count);在jsp中显示 count ,但我无法传递< em>计算对我的servlet的值。我试过document.getElementById("hiddenField").value=count;,但它不起作用。

的Javascript

<script>
    var count = 3;
    $(function() {
        $('#counter').html(count);
        $('#addButton').bind('click', function() {
             count = document.getElementById("dataTable").getElementsByTagName("tr").length;
            $('#counter').html(count);
        });
        $('#deleteButton').bind('click', function() {
            count = document.getElementById("dataTable").getElementsByTagName("tr").length;
            $('#counter').html(count);
        });
    });
    document.getElementById("hiddenField").value=count; // ???
</script>

JSP

Count: <span id="counter"></span> <%-- it works --%>

<form method="post" action="newteamsubmit"> 
...
<input type="hidden" id="hiddenField" name ="countRows" />
<input type="submit" name ="button1" value=" Submit " />
<input type="submit" name = "button1" value=" Cancel " />
</form>

的Servlet

String cr = request.getParameter("countRows"); //I' ve tried also to convert it 
// to int, but that's not my problem, since I cannot pass the value as a start

我花了很多时间,试图找出如何在jsp中访问javascript变量,但我还没有找到任何解决方案。 提前谢谢。

5 个答案:

答案 0 :(得分:0)

document.getElementById(&#39; hiddenField&#39;)。未设置值,因为它位于document.ready之外。把它放在你的点击处理程序中。

答案 1 :(得分:0)

每次单击添加按钮或删除按钮时,都会计算count。但是,只有在加载页面时才设置隐藏字段值(因此其值被硬编码为3)。

您必须在点击处理程序中为#counter元素设置它:

$('#addButton').bind('click', function() {
    count = document.getElementById("dataTable").getElementsByTagName("tr").length;
    $('#counter').html(count);
    $('#hiddenField').val(count);
});
$('#deleteButton').bind('click', function() {
    count = document.getElementById("dataTable").getElementsByTagName("tr").length;
    $('#counter').html(count);
    $('#hiddenField').val(count);
});

另请注意,您在此处的两个点击处理程序中重复完全相同的代码。对于两个按钮,您应该只执行一次:

$('#addButton, #deleteButton').bind('click', function() {
    count = document.getElementById("dataTable").getElementsByTagName("tr").length;
    $('#counter').html(count);
    $('#hiddenField').val(count);
});

甚至,因为您正在使用jQuery:

$('#addButton, #deleteButton').bind('click', function() {
    count = $("#dataTable tr").length;
    $('#counter').html(count);
    $('#hiddenField').val(count);
});

答案 2 :(得分:0)

确保2件事 -

  1. 页面上只有一个ID为“hiddenField”的元素。
  2. 确保以下代码
  3. 的document.getElementById( “hiddenField”)值=计数;

    在页面中。

    只需确保js在加载元素后设置hiddenField。 3.使用Javascript控制台检查任何JS错误。

    休息看起来不错

答案 3 :(得分:0)

这里的主要问题是您尝试从服务器访问,该变量仅存在于客户端。要访问该变量,您必须使用AJAX将其从客户端发送到服务器,以在后端触发某种形式的API。 REST,SOAP或XML-RPC是用于此类事情的常用技术。服务器端代码用于生成UI并向其提供来自数据库等的数据。通常,UI只生成一次,然后客户端调用服务器,要求提供更多数据以响应用户操作,例如单击按钮。

想象一个充满了书籍信息的表格:标题,作者,发布日期等。这个表格可能会变得非常大,传统上这个表格将分成几页,可能还有一个动态过滤器。为了节省带宽并通过不从头开始加载整个页面来增加用户体验,您可以使用AJAX向服务器询问相关数据。这样,页面可以动态,平滑地为用户更新。

在您的情况下,每次用户单击按钮时,您都可以使用此技术更新服务器。

但是,如果您真的只是想在用户执行操作时更新带有值的表单中的隐藏字段,并且服务器除了显示它之外不会对它执行任何操作,您只需使用javascript即可。

还要记住,request变量包含您在提交表单时发布到服务器的数据。 servlet将在客户端发布数据之后获取数据,这是在JSP生成页面之后。代码执行的顺序是JSP - &gt; Javascript - &gt;的servlet。

希望这有帮助!

答案 4 :(得分:0)

您可以这样使用:

document.forms[0].countRows.value = counter

希望这会对你有所帮助