JSF - 无法获取参数值

时间:2014-05-12 14:45:54

标签: jsf get xmlhttprequest

我在尝试将一个请求参数提取到Managed Bean时遇到了一个奇怪的麻烦。我正在使用javascript方法提取浏览器信息(水平和垂直尺寸)。此方法使用XMLHttpRequest发送GET请求,以将具有所需浏览器信息的参数传递到服务器端。所有这一切都正常,但是当我尝试在托管bean中读取参数值时,我总是得到一个NULL值。

我尝试在页面加载之前和之后读取参数,但没有成功。非常奇怪的是,我正在使用FIREBUG来显示请求处理,并且此参数(workArea)显示的值正确,如下图所示。

FIREBUG PrintScreen

这是托管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?有什么方法可以确保数据在应用程序服务器上正确到达? 谢谢!

0 个答案:

没有答案