I would suggest using the viewScope instead. This might seem backward, since you're trying to remove the filter value... except you're not really trying to remove it, you're trying to update it.
The viewScope survives across events on the same instance of a page. So I would recommend adjusting your beforeRenderResponse to something akin to the following:
if (!viewScope.containsKey("searchCriteria")) {
viewScope.put("searchCriteria", param.get("param1"));
}
Then your button can just update the viewScope directly... whereas a new requestScope is created each time, so every time it's looking at the URL.