2015-03-16 2 views
1

Я хочу использовать Primefaces BlockUI's widgetvar (на данный момент я использую для этого модальное диалоговое окно). Приложение должно блокироваться только тогда, когда я выберу что-то (длинный метод вызовет) и разблокируется после завершения. Но он блокирует всю сторону при первом доступе. Сделать что-то не так?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> 

Bean:

@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; 
} 
} 
+0

Можете ли вы объяснить, что вы подразумеваете под _ «Но он блокирует всю сторону при доступе первой стороны». _ – Kukeltje

+0

Я не могу выбрать что-то в Таблица. Таблица заблокирована. – pL4Gu33

+0

Что такое _first side access_ – Kukeltje

ответ

2

Добавить атрибут id и использовать его в атрибуте block= на компоненте blockui

+0

thx. Мой h: body не имеет идентификатора атрибута. Я пробовал это с помощью этого (http://stackoverflow.com/questions/10451424/how-to-spefic-the-body-id-attribute-in-jsf-2), но не работал. Теперь у меня есть outputPanel unter тело, которое блокирует весь контент. – pL4Gu33

+0

Ой, ничего себе .. тоже не было. Вы также могли бы попробовать добавить класс и использовать селектор PrimeFaces @ (. Myclass) в целевом атрибуте. Возможно, он работал с – Kukeltje

+1

@Kukeltje Это не работает, если страница использует шаблон, а тег тела - в указанном шаблоне. – Ced