如果是Chrome,request.getParameter在jsp中返回null。在IE中正常工作

时间:2014-07-21 09:39:58

标签: jsp google-chrome request

当我尝试request.getParameter(SPLIT_ACTION)时,我得到一个空值。这仅适用于Chrome,并且在IE的情况下工作正常。 SPLIT_ACTION是一个常量字符串,其值为“Split”。

这是我的代码行:

<td><button onClick="window.location = '<%=request.getRequestURI() %>?action=<%=SPLIT_ACTION%>&composite=<%=vitalDef.getSyncId() %>';">Split</button></td>

非常感谢任何帮助。

<form method="POST" action="<%=request.getRequestURI() %>">
<table width="100%">
<tr>
    <th colspan="2">Vital Name</th>
    <th>Abbreviation</th>
    <th>Back-end ID</th>
    <th>Sort Order</th>
</tr>
<tr>
    <td width="25"></td>
    <td></td>
    <td></td>
    <td></td>
</tr>
<tr class="compositeheader">
    <td colspan="2">COMPOSITE: <input type="text" name="name_<%=vitalDef.getId()%>" value="    <%=vitalDef.getName() %>"/></td>
    <td><input type="text" name="abbrev_<%=vitalDef.getId()%>" value="<%=vitalDef.getAbbrevName() %>"/></td>
    <td><button onClick="window.location = '<%=request.getRequestURI() %>?action=    <%=SPLIT_ACTION%>&composite=<%=vitalDef.getSyncId() %>';">Split</button></td>
    <td align="right">
        <input type="text" name="sortorder_<%=vitalDef.getId()%>" 
            value="<%=sortKeys.get(vitalDef) %>"/>
    </td>
</tr>
<tr class="compositerow" id="comprow_<%=component.getId() %>">
    <td style="background-color: #ffffff"></td>
    <td><%=beDef.getName() %></td>
    <td><%=beDef.getAbbrevName() %></td>
    <td></td>
    <td align="right">
        <input type="text" name="compsortorder_<%=vitalDef.getId()%>_<%=component.getId()%>" 
            value="<%=component.getSortOrder() %>"/>
    </td>
</tr>

<tr class="vitaldef <%= counter % 2 == 0 ? "even" : "odd" %>" id="vitaldef_<%=vitalDef.getId() %>">
    <td colspan="2"><input type="text" name="name_<%=vitalDef.getId()%>" value="<%=vitalDef.getName() %>"/></td>
    <td><input type="text" name="abbrev_<%=vitalDef.getId()%>" value="<%=vitalDef.getAbbrevName() %>"/></td>
    <td><%=backendName%></td>
    <td align="right">
        <input type="text" name="sortorder_<%=vitalDef.getId()%>" 
            value="<%=sortKeys.get(vitalDef) %>"/>
    </td>
</tr>
<script type="text/javascript">
    $('vitaldef_<%=vitalDef.getId()%>').vitalDefId = <%=vitalDef.getId()%>;
    new Draggable('vitaldef_<%=vitalDef.getId()%>',{revert:true, ghosting: true});
    Droppables.add('vitaldef_<%=vitalDef.getId()%>',
        {'accept': 'vitaldef', 'hoverclass': 'droptarget',
         'onDrop': function (toMerge, me) {
            window.location = "<%=request.getRequestURI() %>?action=<%=MERGE_ACTION%>&item1=" + me.vitalDefId + "&item2=" + toMerge.vitalDefId;
         }
        });

</script>

<tr>
    <td colspan="3">
    <td align="right">
        <input type="submit" name="action" value="<%=RESORT_ACTION %>" onclick="return verifyFields();"/>
    </td>
</tr>
</table>
</form>

1 个答案:

答案 0 :(得分:1)

您的代码存在问题,您必须添加return false;以及onClick标记<button>方法的结尾,如下所示。

<button onClick="window.location ='<%=request.getRequestURI() %>?action=<%=SPLIT_ACTION%>&composite=<%=vitalDef.getSyncId() %>';return false;">Split</button>

如果没有return false;提交表单,因为没有名称为Split的输入组件,您将获得null。

您使用request.getParameter(SPLIT_ACTION)表示request.getParameter("Split"),但没有名为'Split'的参数,这就是您获得null的原因。如果您希望'action'参数使用request.getParameter("action")

此外,您必须小心使用<button>代码,IE和Chrome在<button>代码的情况下采取不同的行动。

<button name='action' value='add'>Add</button>

在上面的示例中,request.getParameter("action");在IE中返回Add,在Google Chrome中返回add

因此,解决方法是您必须为按钮标记的属性value和按钮标记的正文提及相同的值。

应该是。

<button name='action' value='Add'>Add</button>