0

I am working in Netbeans IDE and i have wrote JS-code for sending HTTP Request to server:

var idFilterJS;
var isIE;
var eventsTable;
var req;

function applyFilter(){
    idFilterJS = getRadioValue();
    var url = "http://applyfilter?action=applyfilterXML&id=" + idFilterJS;
    req = initRequest();
    req.open("GET", url, true);
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    req.onreadystatechange = applyFilterCallBack;
    req.send(null);
}

function getRadioValue() {
    var inputs = document.getElementsByName("filter");
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].checked) {
            return inputs[i].value
        }
    }
}

function initRequest(){
    if (window.XMLHttpRequest) {
        if (navigator.userAgent.indexOf('MSIE') != -1){
            isIE = true;
        }
        return new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        isIE = true;
        return new ActiveXObject("Microsoft.XMLHTTP");
    }
}

The code above, I invoke from .jsp:

<div id="filters-list">
    <form name="applyfilter" action="applyfilter">
        <fieldset>
            <legend>Filters</legend>
            <%
                for (int i = 0; i < userFilters.size(); i++) {
            %>
            <input type="radio" name="filter"
                   value="<%=userFilters.get(i).getId()%>"><%=userFilters.get(i).getName()%>
            <br/>
            <%
                }
            %>
            <button onclick="applyFilter();">Apply</button>

            <!--<button onclick="deleteFilter();">Delete filter</button>-->
        </fieldset>
    </form>
</div>

This is servlet:

    public class ApplyFilterServlet extends HttpServlet {

    private ServletContext context;
    private List<EventTransfer> eventsTransfer = null;
    private HttpSession session = null;

    @Override
    public void init() throws ServletException {
        this.context = getServletContext();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        session = request.getSession();
        String action = request.getParameter("action");
        Integer targetId = null;
        try {
            targetId = Integer.parseInt(request.getParameter("id"));
        }
        catch (NumberFormatException e){
            context.getRequestDispatcher("/error.jsp").forward(request, response);
        }
        StringBuffer stringBuffer = new StringBuffer();

}
}

And web.xml for mapping:

 <servlet>
        <servlet-name>ApplyFilterServlet</servlet-name>
        <servlet-class>controller.ApplyFilterServlet</servlet-class>
    </servlet>


<servlet-mapping>
        <servlet-name>ApplyFilterServlet</servlet-name>
        <url-pattern>/applyfilter</url-pattern>
    </servlet-mapping>

Next, I had a breakpoint in ApplyFilterServlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    session = request.getSession();
    String action = request.getParameter("action");
}

So, "request.getParameter("action");" returns null. Why?

alexey
  • 1
  • 4
  • possible duplicate of [Servlets: doGet and doPost](http://stackoverflow.com/questions/2349633/servlets-doget-and-dopost) – Vinay Veluri Aug 25 '14 at 07:57
  • @alexey, verify the web browser console for the ajax request from the network tab and check the parameters being sent –  Aug 25 '14 at 08:04
  • I've already checked. url: "applyfilter?action=applyfilterXML&id=6" req: XMLHttpRequest – alexey Aug 25 '14 at 08:05
  • Don't run a GET request with `Content-Type: application/x-www-form-urlencoded`. – tcooc Aug 27 '14 at 17:05
  • That string I'd added recently. Without it, situation is same. – alexey Aug 27 '14 at 17:20
  • If I write "http://localhost:8084/Events/applyfilter?action=action&id=6" manually at browser, I get parameters in servlet. – alexey Aug 27 '14 at 17:22

1 Answers1

0

You can pass any data as get-string in send method, instead of null

function applyFilter(){
    idFilterJS = getRadioValue();
    var url = "applyfilter";
    var data = "action=applyfilterXML&id=" + idFilterJS
    req = initRequest();
    req.open("GET", url, true);
    req.onreadystatechange = applyFilterCallBack;
    req.send(data);
}
Alex
  • 11,115
  • 12
  • 51
  • 64
  • Can you provide full code example for understanding. May be `applyFilter` works without errors in browser? – Alex Aug 26 '14 at 10:11