- 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/
我在那个 tab view 里面有一个 tab view,在那个 tab view` 里面有另一个 tab view,还有一个警告框。当我尝试打开它时,我的应用程序被强制关闭。 但同样的 AlertD
在 SwiftUI 中,TabView 必须是 Root View 。因此,您不能使用 NavigationLink 导航到 TabView。比如说我的应用程序中有四个屏幕。 屏幕 A 是一个包含屏幕
我有这门课: class PageViewModel:ObservableObject { @Published var cars = [Car]() func delete(_ ca
有没有办法在 TabView 中禁用透明度为 iOS 15 ?如果我的 List没有填满整个屏幕 TabView背景是透明的,我希望始终显示 TabView背景。 最佳答案 感谢@Asperi 为我指
我目前在我的应用程序上面临 pb。我想为由 SwiftUI TabView 控制的项目的插入和删除设置动画。 这是我能想到的最简单的重现问题的 View struct ContentView: Vie
我有一个 TabView SwiftUI 中有两个标签生命周期应用,其中一个具有复杂的 View 结构:NavigationView里面有很多 subview ,即:NavigationLink s
我认为我错过了一些简单的东西,但我无法弄清楚它到底是什么。 我正在尝试使用 UITabViewController 设置一个应用程序,其中一个选项卡将具有 UITableView 和 UISearch
我正在使用 TabVIew,我有两个问题: 1.如何去除 TabView 标题的边框底部? 2. 如何在 TabView 标题中的项目之间添加分隔符? 谢谢, 陈 最佳答案 您既不能删除底部颜色,也不
我有一个简单的 TabView: TabView { NavigationView { VStack { NavigationLink(destinat
我创建了一个带有多个选项卡的应用程序,每个选项卡都有一个 webview。 我的网页 View : struct WebView : UIViewRepresentable { let req
我想创建一个 Activity,它在顶部有一个标题,在它下面有一个 TabHost。这是我的 XML 文件中的内容
我刚刚开始使用 Nativescript,所有这些工作给我留下了深刻的印象! 作为将 VueJS Web 应用程序迁移到移动设备的项目的一部分,我正在尝试使用 tabview 并理解这一点。我似乎无法
我在 TabView 类中有这段代码: package jungle.timer; import com.example.jungletimer.R; import android.os.Bundle
我想在运行时在 android 中单击该选项卡来更改选项卡 View 。 当我在“收藏夹”选项卡中单击时,此选项卡图像会自动像“主页”选项卡一样。 请帮助我。 像这样之前 之后 请举例... 提前致谢
我需要使用 java 代码在运行时创建选项卡 View 。 注意: 不使用 xml 设计 最佳答案 在 XML 中创建 TabHost、TabWidget,然后在运行时添加 TAbHost.TabSp
我正在尝试在操作栏中创建一个自定义选项卡 View ,如下所示: 我得到了这个观点: 我想改变 tabviews 指示器的背景,这样背景颜色就变得不可见,我们在选定的 tabview 指示器下有一条绿
我可以在工具栏中创建选项卡 View ,就像应用程序照片 (Yosemite) 一样吗?我只想要一个分段按钮,没有图像。我尝试将 TabView Controller 的样式设置为“工具栏”,但它也会
我想使用 PrimeFaces TabView 组件在选项卡中显示来 self 们服务器的数据。我需要三个选项卡来显示具有不同数据的三个表。 如果我这样写就可以了: // logic
我已经完全改变了我的代码。但是事件索引仍然显示出问题。有时它会被调用,有时它不会。 下面的 xhtml 代码有什么问题? Admin Panel
SwiftUI 中的 View 默认具有透明背景。这通常意味着它们具有白色背景,因为这是您应用的默认背景颜色。但是,这也意味着您可以使用 ZStack更改整个应用程序的背景颜色,除非您明确设置自己的背
我是一名优秀的程序员,十分优秀!