我在PrimeFaces面板更新中遇到问题。
我有一个主面板,其中包含两个输出面板。每个输出面板可能包含一个按钮,即交换面板。交换面板按钮用于将输出面板从一个交换到另一个。
如果我更新渲染面板的按钮操作,我需要提供主面板ID,它可以正常工作。但是对于树结构层次结构,如果我打算给出两个输出面板ID,它不会渲染面板。当我把日志确认这一点时,按钮操作只调用了一次。
我将附上以下代码示例:
renderingPanel.XHTML
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
<title>
Panel Rendered
</title>
</h:head>
<h:body>
<f:event listener="#{PanelRendered.initializePageAttributes}" type="preRenderComponent"/>
<h:form id="panelFormId">
<p:panel id="mainPanelId" widgetVar="mainPanelId">
<p:outputPanel id="mainOutputPanel" rendered="#{PanelRendered.mainPanelRendered}">
<h:outputText value="hello main"/>
<p:commandButton id="mainSwap" value="Swap To Sub Panel" update="mainOutputPanel,subOutputPanel" action="#{PanelRendered.mainButtonAction}" icon="ui-icon-transferthick-e-w"/>
</p:outputPanel>
<p:outputPanel id="subOutputPanel" rendered="#{PanelRendered.subPanelRendered}">
<h:outputText value="hello sub"/>
<p:commandButton id="subSwap" value="Swap To Main" update="subOutputPanel,mainOutputPanel" action="#{PanelRendered.subButtonAction}" icon="ui-icon-transferthick-e-w"/>
</p:outputPanel>
</p:panel>
</h:form>
</h:body>
</html>
PanelRendered.Java
public class PanelRendered
{
private boolean mainPanelRendered;
private boolean subPanelRendered;
private Logger logger = Logger.getLogger(PanelRendered.class);
public PanelRendered()
{
File configFile = new File("/home/nafeel/Applications/apache-tomcat-7.0.34/webapps/treetable/conf" + File.separator + "log4j.properties");
if (configFile.exists())
{
PropertyConfigurator.configure(configFile.getAbsolutePath());
}
else
{
System.out.println("Configuration Logger File not available");
}
}
public String mainButtonAction()
{
logger.info("Enter inside main button action");
mainPanelRendered = false;
subPanelRendered = true;
return null;
}
public String subButtonAction()
{
logger.info("Enter inside sub button action");
mainPanelRendered = true;
subPanelRendered = false;
return null;
}
public void initializePageAttributes()
{
logger.info("Enter inside initializepage");
mainPanelRendered = true;
subPanelRendered = false;
}
/**
* @return the mainPanelRendered
*/
public boolean isMainPanelRendered()
{
return mainPanelRendered;
}
/**
* @param mainPanelRendered the mainPanelRendered to set
*/
public void setMainPanelRendered(boolean mainPanelRendered)
{
this.mainPanelRendered = mainPanelRendered;
}
/**
* @return the subPanelRendered
*/
public boolean isSubPanelRendered()
{
return subPanelRendered;
}
/**
* @param subPanelRendered the subPanelRendered to set
*/
public void setSubPanelRendered(boolean subPanelRendered)
{
this.subPanelRendered = subPanelRendered;
}
}
当涉及到JSF时,我有点00b,但我也有过类似的问题。我认为您的PanelRender类中的布尔值应该有如下名称的getter:
public boolean isMainPanelRendered()
public boolean isSubPanelRendered()
XHTML文件中使用的表达式语言保持不变。表达式语言在搜索bean以查找属性(函数或变量)之前将在前面添加“is”并将字母大写似乎是一种约定。
因此:
rendered="#{PanelRendered.mainPanelRendered}"
rendered="#{PanelRendered.subPanelRendered}"
保持不变。编辑:在渲染的最后添加了}。编辑:意识到私有成员变量需要一个getter
你能遵循一些JAVA代码指南吗
@ManagedBean@ViewScoped,所以我假设您在xhtml上的bean名称应该是PanelRendered,而不是PanelRendered
XHTML代码:我只是将bean名称从PanelRendered更改为PanelRendered,我是这样更新panel的
并且您的代码在我这里运行良好,如果您有任何错误,请在这里发布。
你的问题是,但对于树结构层次结构,如果我想给出两个输出面板ID,它不会渲染面板。
如果组件与
渲染="false"
它没有在浏览器上生成任何超文本标记语言代码,所以你没有找到id="subOutputGroup"
标记在你输出的超文本标记语言代码中,当你点击命令按钮它调用back bean方法并来更新update="main OutputGroup, subOutputGroup"
它没有找到subOutputGroup
id和ajax调用将失败,你不会得到正确的行为或UI。
我有一个datatable,其中包含删除行的按钮,我想在之后刷新该表。刷新工作很好,除了一个案例,当我删除最后一个项目。我相信这是因为属性,它在ajax更新时表现不佳。它都在一个复合组件中,datatable是有条件呈现的,看起来都是这样的: 除了我从列表中移除最后一个项目(并希望表消失)的情况外,这工作得很好。通过ajax显示表不是问题,因为我添加的项目也没有提交,并且表在添加第一个项目后正确显
我是一个Java GUI初学者,在让我的面板按照我想要的方式进行更新方面遇到了一些麻烦。基本上,当用户点击我的GUI中的一个按钮时,屏幕上当前的形状应该改变为与按钮按下对应的任何形状。我的代码在下面。更新后的形状在显示前被原始形状覆盖的问题。 最后,这里是我的框架类: 谢谢你的帮助!
我有一个模式对话框,其中用户可以根据另一个用户选择和取消选择角色,然后将其提交到数据库以进行更新。 > 加载应用程序 数据库中有一个角色为“admin”的用户 我尝试编辑这个用户,对话框打开,“管理”复选框被选中。
我正在使用prime faces仪表盘。我有2个面板要显示。一个带有“行动”,另一个带有“我的任务”。我面临的问题是两个面板没有按照窗口大小(面板宽度)拉伸。如果我给出宽度:100%也不起作用。但如果我以像素为单位给出宽度和高度,它的工作。有没有什么办法我可以给出宽度和高度的百分比。
问题内容: 我想Ajax使用Primefaces更新JavaScript脚本。 我如何在showMarker中将该值更新为ajax? 问题答案: 将其放在JSF标记中并提供ID。 并有一个按钮或链接是否执行某些操作,并对此进行更新
我有一个表单,其中包含所需的数据,我使用了以下代码: 在同一页面上有一个datatable,它包含我通过表单添加的对象(付款)。添加对象后,我使用以下代码对datable进行更新以添加新对象: 我遇到的问题是,当数据没有输入,我单击按钮,更新完成,表显示为空!但是,验证消息正确地显示为强制数据。 datatable是 我在CDI中使用,因为托管bean如下所示://import //类 }