【发布时间】:2016-03-20 20:52:17
【问题描述】:
我正在开发一个 jsf 中的网络应用程序。
我的问题是关于<h:commandLink> 的工作。
我尝试使用<h:commandLink> 来做我可以用<h:outputLink> 做的事情,只是为了测试。(我知道使用<h:commandLink> 进行静态导航是个坏主意)。
我的<h:commandLink> 存在于一个名为CustomerRight.jsp 的文件中。
所以在我的文件 CustomerRight.jsp 中,我的代码如下所示:
<f:view>
<h:commandLink action="/pages/accountSettings/ToggleMessageService.jsp" value="Click here"></h:commandLink>
</f:view>
现在这个文件包含在另一个名为 Home.jsp 的 jsp 中,如下所示:
<f:view>
<h:form>
<jsp:include page="CustomerRight.jsp"></jsp:include>
</h:form>
</f:view>
现在我们可以看到,当页面包含在 Home.jsp 中时,它将充当嵌套的<f:view> 标记。
因此,<h:commandLink> 不起作用。它会将我重新定向到同一页面,而如果我使用 <h:outputLink> 代替它,那效果很好。
谁能解释一下为什么<h:commandLink> 不工作但<h:outputLink> 在嵌套<f:view> 标签的情况下工作?
如果我从 CustomerRight.jsp 中删除 <f:view> 标记,commandLink 工作正常(因为现在没有嵌套的 <f:view> 标记)
还有<f:view>标签的意义是什么?如果我在任何 jsps 中根本不使用它,则不会呈现页面。我得到一个例外说"java.lang.IllegalStateException: Component javax.faces.component.UIViewRoot@1226eca not expected type. Expected: javax.faces.component.UIOutput. Perhaps you're missing a tag?"
【问题讨论】: