Tao & Zen

Soli Deo Gloria!

导航

jsf1.1 h:commandlink 的bug

<f:verbatim>
 <table width="100%" class="BarBkgnd"><tr>
 
 <td align="center">
</f:verbatim>
<h:outputLabel value="欢迎   " styleClass="GUITag" />
<h:outputText id="userid"  value="#{user.name}" />

<f:verbatim>
 </td>
 
 <td align="center">
</f:verbatim>
<h:outputLabel value="部门 : " styleClass="GUITag"  />
<h:outputText id="level" value="#{user.department}" rendered="true"/>
<f:verbatim>
 </td>
 
 <td align="right">
</f:verbatim>
<h:form>
<h:commandLink action="logout">
  <h:outputText value="登出"/>
</h:commandLink>
</h:form>
<f:verbatim></td>
 
  </tr></table>
</f:verbatim>

上面是段bar的代码,红色的部分如果不添加会出现:
java.lang.NullPointerException
com.sun.faces.renderkit.html_basic.CommandLinkRenderer.getHiddenFieldName(CommandLinkRenderer.java:136)
的错误,找了1天。。排除到最后发现这个问题了。

jsf参考大全上居然是手工实现最后的那个commandlink的action,没有使用导航,当时我就很奇怪了,,有为什么不用呢?原来是这个原因,。。绝对的陷阱。。。。他的代码如下:
<td align="right">
</f:verbatim>
<h:commandLink action="main">
  <h:outputText value="#{res['mainbar.mainLink']}"/>
</h:commandLink>
<f:verbatim>&nbsp; | &nbsp;</f:verbatim>
<h:commandLink action="#{Login_Backing.logout}"  immediate="true">
  <h:outputText value="#{res['mainbar.logoutLink']}"/>
</h:commandLink>
<f:verbatim></td>
那个红色的支撑bean里面是这样写的:
    public String logout() throws IOException{    
      ExternalContext ectx = FacesContext.getCurrentInstance().getExternalContext();
      HttpServletResponse response = (HttpServletResponse)ectx.getResponse();
      HttpSession session = (HttpSession)ectx.getSession(false);
      session.invalidate();    
      
      FacesContext ctx =  FacesContext.getCurrentInstance();
      Application app = ctx.getApplication();
      app.getNavigationHandler().handleNavigation(ctx, "/welcome.jsp", "welcome");
     
      // To avoid using the navigation handler you could also use...
      //response.sendRedirect("../index.jsp");
      return null;   
   
    }
汗,,,怎么不给提个醒嘛。。也许1.2没这问题了。

posted on 2007-06-22 17:02  康国庆--thinkinlove  阅读(1027)  评论(0编辑  收藏  举报