<h:outputLink value="/4JVA-157292-war/supinfo/auth/mycar.xhtml">Car</h:outputLink>
<h:outputLink value="Log Out" onclick="${loginController.logout()}" />
如您所见,如果我点击汽车链接。我将执行${loginController.logout()}
,但是如果我删除了注销。我会进入车页。
答案 0 :(得分:4)
<h:ouputLink>
组件用于呈现普通a
锚元素,其href
属性评估为value
<h:outputLink>
属性,附带查询参数该组件的子标记为<f:param>
个标记。
<h:ouputLink>
未使用执行服务器端操作,正如您错误地预期的那样。您可能会将其与用于通过JavaScript调用触发服务器端操作的<h:commandLink>
组件混淆。
如果要调用action方法,则必须切换到命令comnponent(或其衍生物),如<h:commandLink>
。其action
属性应指向所需的操作方法,如下所示:
<h:commandLink value="Log out" action="#{loginController.logout}" />
通过这种方式,您将能够执行bean操作方法。
另外值得注意的是,由于JSF 2.0有一个<h:link>
组件,可用于处理应用程序范围的导航。它在outcome
属性中获取导航案例结果,因此<h:outputLink>
组件可用于链接到外部资源。
有关该主题的更多信息,请阅读以下答案:When should I use h:outputLink instead of h:commandLink?。
关于您遇到的问题的原因,onclick
属性呈现为生成的onclick
元素的a
事件处理程序,它响应HTML元素上的单击事件。附属于。如果事件被触发,则调用客户端JavaScript代码(通过函数调用onclick
指向或执行其中包含的内联代码)。请注意onclick
在客户端上运行(在Web浏览器中的JavaScript上下文中),而action
在服务器上运行(根据Web服务器中按下的提交按钮执行Java代码)。
至少在以下情况下,onclick
的使用可能会很有成效:
如果它与命令组件一起使用,如果不满足某些客户端要求,它可以停止表单提交到服务器(即一旦事件将在之前触发 任何与该元素相关的连续事件(如表单提交),就会显示确认对话框,并且已按下取消按钮,或客户端验证失败):
<h:commandLink value="Delete item" action="#{bean.delete(item)}" onclick="return confirm("Are you sure you want to delete this item?");" ... />
或
<h:commandLink value="Submit data" action="#{bean.action}" onclick="return inputValid();" ... />
与
<script type="text/javascript">
function inputValid() {
var isInputValid = ...;
//decide what's valid or not and set variable to true/false accordingly
return isInputValid;
}
</script>
它可能用于触发某些GUI更改,尤其是与非命令组件一起使用时,例如:
<h:button value="Show dialog" onclick="showDialog(); return false;" ... />