表单提交时未调用JSF valuechangelistener
JSF valuechangelistener not called upon form submission
我看了其他类似的帖子,但没有任何帮助。这是我的代码:
<script type="text/javascript">
function submit1()
{
document.forms["form"].submit();
}
</script>
<form name="form">
<h:selectOneMenu value="#{bean.categorySelected}" onchange="submit1()"
valueChangeListener="#{bean.changeCategory}">
<f:selectItem itemLabel="Select a Category" itemValue="null" />
<f:selectItems value="#{bean.items}" />
</h:selectOneMenu>
</form>
当我从下拉列表中选择时,它只会重新加载组件。这意味着bean.getItems被调用,但没有值或valueChangeListener,我的日志表明它只经历了阶段1和6。如果我没记错的话,除非提交表单,否则2-5阶段不会启动。我做错了什么?
您需要一个完整的JSF <h:form>
组件,而不是一个普通的HTML <form>
元素。默认情况下,一个没有任何method
和action
属性的纯HTML <form>
元素会在提交当前URL上的GET请求时触发。这正好证实了你所看到的行为。这就像你只是在刷新F5当前请求的页面。
因此,按如下方式修复:
<h:form>
<h:selectOneMenu value="#{bean.categorySelected}" onchange="this.form.submit()" valueChangeListener="#{bean.changeCategory}">
<f:selectItem itemLabel="Select a Category" itemValue="null" />
<f:selectItems value="#{bean.items}" />
</h:selectOneMenu>
</h:form>
(请注意,附加的JS函数是不必要的)
<h:form>
将生成一个<form method="post">
,以及至少两个JSF特定的隐藏输入字段,用于标识当前表单和视图状态(在修复JSF代码后,检查生成的HTML输出中的差异)。POST请求和两个隐藏字段的组合使JSF能够知道它必须处理什么视图,必须处理什么表单,以及必须调用什么侦听器和操作。
相关文章:
- 如何通过ajax刷新JSF填充的javascript变量
- 当我点击jsf中的primefaces命令按钮时,如何获得点击事件
- jsf中两个字符串的颜色代码差异
- 如何使用脚本在jsf中执行命令按钮的自动点击
- JSF/PrimeFaces客户端输入操作
- 我该如何从JSF Bean调用JavaScript函数
- AJAX JSF请求后重新加载Javascript
- JSF ui:include and getElementById
- 使用 jQuery/JavaScript 在 JSF 中更改选定行的背景颜色
- 如何在 JSF 中将 JS 函数作为 JSON 属性传递给前端
- JSF数据表分页中的当前页码
- 有没有一种方法可以将我的JS函数排队到JSF事件队列中
- 如何使用jsf制作垂直菜单
- 如何将客户端进度侦听器添加到 JSF 2.2 ajax 请求中
- JSF元素在外部上下文中加载了相对url
- JSF在Ajax更新后调用javascript函数
- 如何更改<h: 选择一个菜单>在JSF中选择一个条目的下拉菜单
- 通过ajax将PrimeFaces Schedule JSF页面加载到另一个JSF页面中
- 一旦用户登录JSF页面,就禁用浏览器返回按钮
- 为什么分页数据表JQuery没有'不要使用JSF ui:重复