奇怪的jsf初始化。。。。

wula0010 2009-11-19
我的页面:
<body>
   <f:view>
      <%@include file="/baseinfo.jsp" %>
      <h:form>
        <div class="NormalSmall">用户信息</div>
            <h:outputText value="sno" styleClass="InnerTable"/>
            <h:outputText value="empno" styleClass="InnerTable"/>
            <h:outputText value="pasword" styleClass="InnerTable"/>
            <h:dataTable var="item" value="#{ErrorTestBean.userList}" rowClasses="InnerTable" border="1">
                <h:column>
                   <h:outputText value="#{item.sno}" styleClass="InnerTable"/>
                </h:column>
                <h:column>
                   <h:outputText value="#{item.empno}" styleClass="InnerTable"/>
                </h:column>
                <h:column>
                   <h:outputText value="#{item.password}" styleClass="InnerTable"/>
                </h:column>
            </h:dataTable><br>
            <h:outputText value="#{ErrorTestBean.empno}"/><h:outputText value="#{ErrorTestBean.password}"/>
            <br><h:commandButton type="submit" action="#{ErrorTestBean.Test}" value="test"/>
        </h:form>
        </f:view>
    </body>
   
public class ErrorTestBean {
    private String empno;
    private String password;
    private List userList=new ArrayList();

    /** Creates a new instance of ErrorTestBean */
    public ErrorTestBean() throws Exception {
        if (!isPostBack()) {
            empno = "WULA0010";
            password = "111";
            getRequest();
            getUser();
        }else{
            getRequest();
        }
    }
   
    .....
   
    public void getRequest(){
        FacesContext context=FacesContext.getCurrentInstance();
        HttpServletRequest request=(HttpServletRequest)context.getExternalContext().getRequest();
        String str=request.getQueryString();
    }

    public boolean isPostBack( ) {
        return (!FacesContext.getCurrentInstance().getRenderResponse());
    }
}
   
第一次运行页面时,页面到ErrorTestBean的构造方法里初始化变量,执行if (!isPostBack()) {..}中间的语句,
这时调用getRequest(),你会发现request是空的,里面没有值,request.setAttribute("msg", "我的信息");
在页面:
<%
        Object o = request.getAttribute("msg");
%>
这样在页面你也取不到值,o=null,通过页面的test按钮,调用ErrorTestBean.Test(),首先会运行ErrorTestBean的构造方法,执行
else{...}中间的方法,再调用getRequest(),你会发现request就不是空的了,request.setAttribute("msg", "我的信息");
在页面:
<%
        Object o = request.getAttribute("msg");
%>
这样就可以取到值了,...........

难道第一次调用不用request?那jsf用什么发起的请求?如何返回的值呢?
terryzhou 2009-11-20
负责的告诉你,request不是空
[2009-11-20 10:54:13,134] DEBUG com.jstrd.oss.platform.rbac.vo.system.sysnews.SysNewsManager con ...
[2009-11-20 10:54:13,138] DEBUG com.jstrd.oss.platform.rbac.vo.system.sysnews.SysNewsManager org.apache.coyote.tomcat5.CoyoteRequestFacade@176b58a
[2009-11-20 10:54:13,145] DEBUG com.jstrd.oss.platform.rbac.vo.system.sysnews.SysNewsManager init ...
[2009-11-20 10:54:13,153] DEBUG com.jstrd.oss.platform.rbac.vo.system.sysnews.SysNewsManager org.apache.coyote.tomcat5.CoyoteRequestFacade@176b58a


Object o = request.getAttribute("msg"); 取不到值得问题,LZ你自己检查下代码,看不出你这方法写哪儿
zhanhongbo1112 2009-11-25
感觉这样使用JSF怪怪的,
scd01234 2009-12-04
LZ 建议换个思路:
一: 在BB里面添加一个成员变量:
public class SomeBB {
  pirvate String init="";
  
  init(){}

  public  void getInit(){
   
  //在这里面加载一些初始化信息

  }

}



在JSP 页面顶部添加几行标签:


<t:saveState value="#{ProblemStatByOrgan}"></t:saveState>
<t:inputHidden value="#{ProblemStatByOrgan.init}"></t:inputHidden>



上面2个标签的作用我用不用说了吧? 都是标准的T标签用法
Global site tag (gtag.js) - Google Analytics