我在尝试将一个请求参数提取到Managed Bean时遇到了一个奇怪的麻烦。我正在使用javascript方法提取浏览器信息(水平和垂直尺寸)。此方法使用XMLHttpRequest发送GET请求,以将具有所需浏览器信息的参数传递到服务器端。所有这一切都正常,但是当我尝试在托管bean中读取参数值时,我总是得到一个NULL值。
我尝试在页面加载之前和之后读取参数,但没有成功。非常奇怪的是,我正在使用FIREBUG来显示请求处理,并且此参数(workArea)显示的值正确,如下图所示。
这是托管bean代码....
public void getBrowserWorkArea()
{
Map<String,String> requestParams = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
String selectIDRastreador = requestParams.get("workArea");
localMapResolutionH = selectIDRastreador;
if (selectIDRastreador != null)
{
int paramIndex = localMapResolutionH.indexOf("px");
localMapResolutionH = selectIDRastreador.substring(0,paramIndex + 2);
localMapResolutionV = selectIDRastreador.substring(paramIndex+2,selectIDRastreador.length());
mainPanelGridStyle = "text-align:center; width: " + localMapResolutionH;
FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().put("localMapResolutionH", localMapResolutionH);
FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().put("localMapResolutionV", localMapResolutionV);
FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().put("mainPanelGridStyle",mainPanelGridStyle );
}
else
mainPanelGridStyle = "text-align:center; width: 1050px ";
}
为了使事情更清楚,这是一个会话范围的bean,在faces-config.xml中配置了这种行为。
这是xhtml代码:
<html xmlns="http://www.w3c.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<link type="text/css" rel="stylesheet" href="#{request.contextPath}/resources/css/alinhamento.css" />
<h:outputScript library="javascript" name="cliente_ci.js" target="head" />
</h:head>
<h:body>
<h:form id="formLogin" class="algnCentralizado">
<div class="algnCentralizado">
<br></br>
<br></br>
<br></br>
<br></br>
<br></br>
Login <p:inputText id="user_login" value="*****" label="Senha">
</p:inputText>
<br></br>
<br></br>
Senha <p:inputText id="user_passwd" value="*****" label="Senha">
</p:inputText>
<br></br>
<br></br>
<p:commandButton
icon = "ui-icon-check" styleClass="centered"
action = "#{BeanLogin.carregaInicial}"
value = "Ok" ajax="false" float="center"/>
<br></br>
<f:view>
<h:outputText value="#{BeanLogin.mainPanelGridStyle}" />
</f:view>
</div>
</h:form>
<h:outputScript>
setBrowserWorkArea();
</h:outputScript>
</h:body>
</html>
以下是我负责执行GET请求的JavaScript函数。它是使用h:outputScript:
从xhtml页面调用的 function setBrowserWorkArea()
{
var http = new XMLHttpRequest();
var url = "http://localhost:8080/europa_tracker?";
var browserW = window.innerWidth;
var browserH = window.innerHeight;
var params = "workArea=";
params = params.concat(browserW);
params = params.concat("px");
params = params.concat(browserH);
params = params.concat("px");
http.open("GET", url + params, true);
http.send();
}
问题:为什么我在托管bean中获取参数值NULL?有什么方法可以确保数据在应用程序服务器上正确到达? 谢谢!