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> | </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没这问题了。
<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> | </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) 编辑 收藏 举报