- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我现在在 tabView 中使用 confirmDialog 时遇到问题。这是我的确认对话框
<p:confirmDialog global="true" showEffect="fade" hideEffect="explode">
<h:form>
<p:commandButton value="Yes" type="button"
styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
<p:commandButton value="No" type="button"
styleClass="ui-confirmdialog-no" icon="ui-icon-close" />
</h:form>
</p:confirmDialog>
在第一个 tabView 中,我有一个确认按钮
<p:commandButton value="Import" icon="ui-icon-arrowrefresh-1-w"
update=":form:growl">
<p:confirm header="Confirmation" message="Are you sure?" />
</p:commandButton>
在第二个 tabView 中,我有那个按钮。
现在我的问题是:在第一个选项卡中,我的 confirmDialog 具有我想要的全文:标题和消息,但是在第二个选项卡中,标题和消息都变为“空”。只有按钮 yes 和 no 的 confirmDialog 仍然有效。我不知道发生了什么,请帮助我,如何让 confirmDialog 在所有 tabView 中显示完整内容
最佳答案
p:confirm 没有实现状态保存,因此它在第一个 JSF 生命周期后失去了它的属性值。它还仅在 View 构建时评估 EL 一次。
你可以扩展PrimeFaces的ConfirmBehavior
,实现saveState
,restoreState
,通过behavior-重写faces-config.xml中原有的行为- ID org.primefaces.behavior.ConfirmBehavior
。然后您将能够在后续请求中渲染和重新渲染 p:confirm。
您应该创建自己的 my:confirm,因为您需要一个自定义标签处理程序,并且您不能以非丑陋的方式替换另一个标签库的标签的标签处理程序。
创建 ConfirmBehavior。
package my;
import javax.faces.FacesException;
import javax.faces.component.UIComponent;
import javax.faces.component.behavior.ClientBehaviorContext;
import javax.faces.context.FacesContext;
import org.primefaces.behavior.base.AbstractBehavior;
import org.primefaces.component.api.Confirmable;
import org.primefaces.json.JSONObject;
public class ConfirmBehavior extends AbstractBehavior {
public final static String BEHAVIOR_ID = "my.ConfirmBehavior";
@Override
public String getScript(ClientBehaviorContext behaviorContext) {
FacesContext context = behaviorContext.getFacesContext();
UIComponent component = behaviorContext.getComponent();
String source = component.getClientId(context);
String headerText = JSONObject.quote(this.getHeader());
String messageText = JSONObject.quote(this.getMessage());
if (component instanceof Confirmable) {
String script = "PrimeFaces.confirm({source:\"" + source + "\",header:" + headerText + ",message:"
+ messageText + ",icon:\"" + getIcon() + "\"});return false;";
((Confirmable) component).setConfirmationScript(script);
return null;
} else {
throw new FacesException("Component " + source + " is not a Confirmable. ConfirmBehavior can only be "
+ "attached to components that implement org.primefaces.component.api.Confirmable interface");
}
}
public String getHeader() {
return eval(PropertyKeys.header, null);
}
public void setHeader(String header) {
setLiteral(PropertyKeys.header, header);
}
public String getMessage() {
return eval(PropertyKeys.message, null);
}
public void setMessage(String message) {
setLiteral(PropertyKeys.message, message);
}
public String getIcon() {
return eval(PropertyKeys.icon, null);
}
public void setIcon(String icon) {
setLiteral(PropertyKeys.icon, icon);
}
public enum PropertyKeys {
header(String.class), message(String.class), icon(String.class);
final Class<?> expectedType;
PropertyKeys(Class<?> expectedType) {
this.expectedType = expectedType;
}
}
@Override
protected Enum<?>[] getAllProperties() {
return PropertyKeys.values();
}
}
创建 ConfirmBehaviorHandler。
package my;
import javax.faces.application.Application;
import javax.faces.view.facelets.BehaviorConfig;
import javax.faces.view.facelets.FaceletContext;
import javax.faces.view.facelets.TagAttribute;
import org.primefaces.behavior.base.AbstractBehaviorHandler;
public class ConfirmBehaviorHandler extends AbstractBehaviorHandler<ConfirmBehavior> {
private final TagAttribute header;
private final TagAttribute message;
private final TagAttribute icon;
public ConfirmBehaviorHandler(BehaviorConfig config) {
super(config);
this.header = this.getAttribute(ConfirmBehavior.PropertyKeys.header.name());
this.message = this.getAttribute(ConfirmBehavior.PropertyKeys.message.name());
this.icon = this.getAttribute(ConfirmBehavior.PropertyKeys.icon.name());
}
@Override
protected ConfirmBehavior createBehavior(FaceletContext ctx, String eventName) {
Application application = ctx.getFacesContext().getApplication();
ConfirmBehavior behavior = (ConfirmBehavior) application.createBehavior(ConfirmBehavior.BEHAVIOR_ID);
setBehaviorAttribute(ctx, behavior, this.header, ConfirmBehavior.PropertyKeys.header.expectedType);
setBehaviorAttribute(ctx, behavior, this.message, ConfirmBehavior.PropertyKeys.message.expectedType);
setBehaviorAttribute(ctx, behavior, this.icon, ConfirmBehavior.PropertyKeys.icon.expectedType);
return behavior;
}
}
在 faces-config.xml 中注册 ConfirmBehavior。
<?xml version="1.0" encoding="utf-8"?>
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
version="2.2">
<behavior>
<behavior-id>my.ConfirmBehavior</behavior-id>
<behavior-class>my.ConfirmBehavior</behavior-class>
</behavior>
</faces-config>
在您的标签库 my.taglib.xml 中注册 ConfirmBehaviorHandler。
<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facelettaglibrary_2_2.xsd"
version="2.2">
<namespace>http://mycompany.ru/my</namespace>
<tag>
<tag-name>confirm</tag-name>
<behavior>
<behavior-id>my.ConfirmBehavior</behavior-id>
<handler-class>my.ConfirmBehaviorHandler</handler-class>
</behavior>
</tag>
</facelet-taglib>
现在您可以像使用 p:confirm 一样使用 my:confirm,但具有状态保存和动态 EL 评估功能。
关于Primefaces p :confirmDialog inside tabView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21509363/
我想为每个条显示不同颜色的 primefaces 条形图。我得到的最接近的就像图像: 我想用不同的颜色来表示这些条,比如绿色代表“准时”,黄色代表“警告”,红色代表“逾期” 我尝试使用 model.s
我对 Primefaces 3 对话框的构造感到困惑。 我在 SO 中看到了具有这种模式的问题。表单在对话框之外。 但另一个问题有这个。 Primef
我尝试使用一个简单的gmap示例开始开发Web应用程序,但是它对我不起作用。 我使用了在网页上找到的示例电影收藏家。我只在template.html文件中包含了这个代码。 我收到此错误: javax.
我正在使用 primefaces 3.0。我有三个文本字段,其中任何一个都是必需的。我如何在 primefaces 中验证这一点。请帮忙..谢谢 最佳答案 通常,当在组件上使用自定义 f:valida
我正在尝试为 primefaces 选择列表创建自定义过滤器。当我按照手册中的说明进行操作时,我在 primefaces 的某处遇到了 TypeError。 我对picklist的定义 我的过滤
我正在努力处理primefaces日历。我需要的是,如果今天是 2011 年 7 月 28 日,我可以限制用户选择 7 月 28 日之前 1 年和 7 月 28 日之后 3 年的日期。 我查看了 pr
有没有办法删除 p:datatable 标题上的全选复选框。 我需要单个行上的复选框,而不是标题上的复选框。 最佳答案 这非常有效: .ui-chkbox.ui-chkbox-all.ui-widge
Primefaces 3.5,Mojarra 2.1.14。这是我的 PF 数据表,它包含一个名为“自动”的不可编辑 bool 列和可编辑的“标签”列:
我想在向导的最后一个选项卡上隐藏后退按钮。 我正在使用素面。它的解决方案是什么? 谢谢 最佳答案 您可以使用 jQuery 在客户端执行此操作: 假设您正在使用展示中的向导:http://www.pr
如果我在 PrimeFaces 数据表中设置属性“scrollable=true”,它可以垂直滚动。但是可以水平滚动这个表格吗? 最佳答案 Primefaces 支持在数据表上水平滚动。只需像这样指定
我有这个代码。在用户选择一行并关闭对话框之后,它将触发rowSelect事件。在我更新为primfaces 3.3(我安装了ver3.2)之前,它工作得很好。我在控制台中没有任何异常,当我调试时,我看
是否存在任何方法来设置 primefaces 的日历组件的年份列表? 最佳答案 对于年份列表,您可以使用 navigator="true" p:calendar 中素面的属性标记和年份范围 c-100
我正在使用 primefaces 3.2。我已经准备好了向导,可以在数据表的同一页面上插入用户信息。向导逐个选项卡获取信息并在确认选项卡上提交。它还将反射(reflect)在数据表的同一页面上。它运行
我有一个 p:treeTable,树内容都在一列中。该树是一个共享组件,因此我的某些页面需要列标题,而有些则不需要。在列标题为空的页面中,它为列标题创建一个空行,这是我不想要的。我确实想要列内容,只是
我使用的是primefaces 3.4,我在 p:overlaypanel 中有一个 p:calendar 。当我选择日期时,覆盖面板关闭(使用 Google Chrome 时)当我使用 Firefo
当我使用日历时,我将“timeOnly”设置为“true”,将“pattern”设置为“HH:mm a”。 当输入时间大于或等于“13:00 pm”时,日历每次获得焦点,都会 自动将时间更改为“23:
我也在尝试获取枚举“CityCodes.java”中定义的城市代码,这是我的枚举类,我的定义如下: public enum Cities { AL("Alabama","1"), AK("Alaska
在 PrimeFaces 展示页面上有一个简单的标题栏,适合实际主题。我的意思是此页面上的“欢迎来到 PrimeFaces 展示”文本:http://www.primefaces.org/showca
是否可以在 Primefaces 中创建垂直菜单栏? 我习惯了像 Ext-JS 这样简单的纯 AJax 框架,但到目前为止我还没有在 PF 中看到这样的组件。 谢谢, 乔 最佳答案 它被称为分层菜单。
是否可以设置 Primefaces 的 ScrollPanel 的滚动速度? Scrollpanel 在“ native ”模式下的滚动速度可以,但在“默认”模式下不行。 我使用的是 Primefac
我是一名优秀的程序员,十分优秀!