Jsf 2 Primefaces BlockUI使用widgetvar阻止所有

Jsf 2 Primefaces BlockUI使用widgetvar阻止所有,jsf-2,primefaces,blockui,Jsf 2,Primefaces,Blockui,我想使用Primefaces BlockUI的widgetvar(目前我使用一个模态对话框)。仅当我选择某个内容(将调用一个长方法)并在完成后取消阻止时,应用程序才应该阻止。但它会阻止第一方的完全访问。我做错什么了 当我阻塞表时,它会工作。(block=“table”)但我想阻止整个页面 使用Primefaces 5.1和Mojarra 2.2.8 简短示例: xhtml: <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http:/

我想使用Primefaces BlockUI的widgetvar(目前我使用一个模态对话框)。仅当我选择某个内容(将调用一个长方法)并在完成后取消阻止时,应用程序才应该阻止。但它会阻止第一方的完全访问。我做错什么了

当我阻塞表时,它会工作。(
block=“table”
)但我想阻止整个页面

使用Primefaces 5.1和Mojarra 2.2.8

简短示例:

xhtml:

<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">

<h:head>
<title>test</title>
</h:head>

<h:body>
<h:form>

    <p:blockUI widgetVar="block" blocked="false"/>
    <p:dataTable id="table" value="#{myController.tableItems}" rowKey="#{data}"
        selection="#{myController.selectedItem}" selectionMode="Single"
        var="data">
        <p:ajax event="rowSelect" onstart="PF('block').show()"
            listener="#{myController.doSomething}"
            oncomplete="PF('block').hide()" />


        <p:column>#{data}</p:column>

    </p:dataTable>
</h:form>
</h:body>
</html>
@ManagedBean
@ViewScoped
public final class MyController implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;

private List<String> tableItems;

private String selectedItem;

@PostConstruct
public void init() {
    tableItems = new ArrayList<String>();
    tableItems.add("test1");
    tableItems.add("test2");
}

public void doSomething(SelectEvent event){
    System.out.println("DO Something");
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }       
}

public String getSelectedItem() {
    return selectedItem;
}

public void setSelectedItem(String selectedItem) {
    this.selectedItem = selectedItem;
}

public List<String> getTableItems() {
    return tableItems;
}

public void setTableItems(List<String> tableItems) {
    this.tableItems = tableItems;
}
}

测试
#{data}
Bean:

<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">

<h:head>
<title>test</title>
</h:head>

<h:body>
<h:form>

    <p:blockUI widgetVar="block" blocked="false"/>
    <p:dataTable id="table" value="#{myController.tableItems}" rowKey="#{data}"
        selection="#{myController.selectedItem}" selectionMode="Single"
        var="data">
        <p:ajax event="rowSelect" onstart="PF('block').show()"
            listener="#{myController.doSomething}"
            oncomplete="PF('block').hide()" />


        <p:column>#{data}</p:column>

    </p:dataTable>
</h:form>
</h:body>
</html>
@ManagedBean
@ViewScoped
public final class MyController implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;

private List<String> tableItems;

private String selectedItem;

@PostConstruct
public void init() {
    tableItems = new ArrayList<String>();
    tableItems.add("test1");
    tableItems.add("test2");
}

public void doSomething(SelectEvent event){
    System.out.println("DO Something");
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }       
}

public String getSelectedItem() {
    return selectedItem;
}

public void setSelectedItem(String selectedItem) {
    this.selectedItem = selectedItem;
}

public List<String> getTableItems() {
    return tableItems;
}

public void setTableItems(List<String> tableItems) {
    this.tableItems = tableItems;
}
}
@ManagedBean
@视域
公共最终类MyController实现了可序列化{
/**
* 
*/
私有静态最终长serialVersionUID=1L;
私人物品清单;
私有字符串selectedItem;
@施工后
公共void init(){
tableItems=新的ArrayList();
表项。添加(“测试1”);
表项。添加(“测试2”);
}
公共无效doSomething(选择事件){
System.out.println(“做点什么”);
试一试{
《睡眠》(2000年);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}       
}
公共字符串getSelectedItem(){
返回selectedItem;
}
public void setSelectedItem(字符串selectedItem){
this.selectedItem=selectedItem;
}
公共列表getTableItems(){
归还物品;
}
公共作废setTableItems(列表tableItems){
this.tableItems=tableItems;
}
}

在主体中添加一个
id
属性,并在blockui组件的
block=
属性中使用该属性。您能解释一下“但是它在第一方访问时阻止了完整的一面”的意思吗?我无法在表中选择某些内容。该表被“阻止”。当我打开页面并尝试在表中进行选择时,第一面访问是什么意思。这不再适用于blockui。当在表上设置块目标时,它可以正常工作,但我想锁定整个页面。thx。我的h:body没有属性id。我用这个()尝试了一下,但没用。现在我在主体上有一个输出面板,它阻止了整个内容。。也没有。您还可以尝试添加一个类,并在目标属性中使用PrimeFaces选择器@(.myclass)。可能有用to@Kukeltje如果页面使用的是模板,而body标签位于所述模板中,则该操作无效。