我想在不使用任何按钮或链接的情况下,在选择了PF selectOneMenu中的值之后,立即从支持bean调用一个操作。我已经看过这个问题了:
何时使用valueChangeListener或F:Ajax侦听器?
<p:selectOneMenu id="Ctl" value="#{actionBean.department}"
valueChangeListener="#{actionBean.ShowListDeptAct(event)}" onchange="submit()">
<f:selectItem itemLabel="Dept A" itemValue="Dept A"/>
<f:selectItem itemLabel="Dept B" itemValue="Debt B"/>
<f:selectItem itemLabel="Dept C" itemValue="Dept C"/>
</p:selectOneMenu>
bean方法:
public void ShowListDeptAct(ValueChangeEvent event) {
department = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("department");
listDeptActions();
}
public String listDeptActions() {
//department = getDepartment();
deptActions = facade.findByDept(department);
return "DeptAction";
这只会导致刷新页面,而bean方法甚至无法正常工作。
第二种方法是使用p ajax标记:
<p:selectOneMenu id="Ctl" value="#{actionBean.department}">
<a href="ActionMaster.xhtml"></a>
<f:selectItem itemLabel="Dept A" itemValue="Dept A"/>
<f:selectItem itemLabel="Dept B" itemValue="Debt B"/>
<f:selectItem itemLabel="Dept C" itemValue="Dept C"/>
<p:ajax listener="#{actionBean.ShowListDeptAct}" oncomplete="submit()"/>
</p:selectOneMenu>
public void ShowListDeptAct(AjaxBehaviorEvent event) {
department = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("department");
listDeptActions();
}
public String listDeptActions() {
//department = getDepartment();
deptActions = facade.findByDept(department);
return "DeptAction";
}
当您使用Ajax时,始终牢记视图的哪个部分需要提交给服务器,哪个部分需要更新作为响应,这一点非常重要。这是处理Ajax请求时的头号错误源。
对于
-标记,这是用属性process
和update
指定的,在纯JSF
中使用属性execute
和render
。这对于理解这些工作原理非常有帮助:理解PrimeFaces Process/Update和JSF f:Ajax execute/render属性
在您的第一次尝试中,您尝试从请求参数映射中获取参数,这不是一个好主意,因为每个请求参数的关键字将是发送的组件的id。您必须知道组件的id才能获得值。如果可能,不建议在服务器端使用组件ID,因为当封闭命名容器更改时,组件ID可能会更改,因此不可靠。这也严重干扰了视图和程序逻辑的分离。最好的尝试是将组件的值绑定到服务器端bean上的变量,就像您已经做过的那样。
在您的第二次尝试中,
-标记中process
的默认值为null,因此没有组件的值发送到服务器。如果您将
的值写入并绑定到服务器上的某个变量,则可以在doAction()
-方法中使用部门的值。
问题内容: 我已经进行了一些研究,发现的大多数示例都使用表单(显然用于用户输入)来收集数据,然后通过请求对象将其传递到另一个JSP页面。 我的问题是:如果未在HTML 标记中设置参数,是否可以在JSP页面之间传递参数? 问题答案: JSP页面无法分辨手动构造的GET URL之间的区别,例如: ,而不是类似的内容: 可以通过或 那是你要的吗
PrimeFaces的CommandButton允许指定图标: 但是,我需要根据JSF托管bean属性启用/禁用图标。 我试过了 这适用于选择不同的图标,但不允许完全禁用图标(即,在没有属性的情况下获得相同的渲染效果)。我可以在中返回一个空字符串,但PrimeFaces仍将渲染额外的
我试图在一个for循环中创建按钮。在每个循环中,将i计数值作为命令值中的参数传递出去。因此,当从命令值调用函数时,我可以判断哪个按钮被按下并相应地操作。问题是,假设len是3,它将创建3个按钮,标题为“游戏1”到“游戏3”,但是当按下任何一个按钮时,打印值总是2,最后一次迭代。所以看起来按钮是作为单独的实体制作的,但是命令参数中的i值似乎都是一样的。下面是代码: 有没有办法在每次迭代时获取当前的i
我可以使用此命令添加Jfram对象 然而,当我在一个单独的方法中编写这个时,我无法添加,因为“this”方法位于该对象内。 如何选择jframe而不是“this” 我不想创建新的jframe,因为已经有了
问题内容: 我有2个按钮,分别名为“ ButtonA”,“ ButtonB”。如果要单击任何按钮,我希望程序打印“ hello,ButtonA”和“hello,ButtonB”。我的代码如下: 当我单击ButtonA时,会发生错误。 我理解此错误,但是如何将ButtonA的文本传递给lambda? 问题答案: 这应该工作: 有关更多信息,请查看Tkinter回调
我使用Primeface 4.0和jsf 2.0。 我试图调用托管bean的一个方法,在旋转木马中的Primefaces commandbutton中,但它不起作用。该按钮似乎无法调用该方法。什么都没发生。。。 所以,我一直在寻找,但我找不到任何能帮助我解决这个问题的东西。 下面是我的代码: 页xhtml 以及管理bean的方法 OBS:May bean的范围是ViewScoped。 请 谢谢