如何禁用或启用一组组件



是一次禁用或启用一组组件的任何方法。例如:我想禁用整个表单,它反过来有一对输入文本,下拉框,.....我希望能够同时禁用或启用所有这些

怎么做?而不是使用布尔变量和添加disable="#{布尔变量}到所有组件。有没有其他的方法把所有的他们在一个组件,使其启用或禁用?

正如@Kukeltje在一个类似的问题中告诉我的:"对于每个jsf的新版本,检查massAttribute (from omnifaces)"。

在我意识到这一点之前,我用自己的代码一次禁用了一组组件。这是我的代码,但我建议去"massAttribute"如前所述:

public class UtilsPrimefaces { 
/**
 * Disable all the children components
 * @param uiComponentName
 */
public static void disableUIComponent(String uiComponentName) {  
    UIComponent component = FacesContext.getCurrentInstance()  
            .getViewRoot().findComponent(uiComponentName);
    if(component!=null) {
        disableAll(component.getChildren());
    } 
}  
/**
 * Recursive method to disable the list
 * @param components Widget PD list
 */
private static void disableAll(List<UIComponent> components) {  
    for (UIComponent component : components) {  
        logger.info(component.getClass().getTypeName());            
        if (component instanceof InputText) {  
            ((InputText) component).setDisabled(true);
        } else if (component instanceof InputNumber) {  
            ((InputNumber) component).setDisabled(true);
        } else if (component instanceof InputTextarea) {  
            ((InputTextarea) component).setDisabled(true);
        }  else if (component instanceof HtmlInputText) {  
            ((HtmlInputText) component).setDisabled(true);
        }  else if(component instanceof SelectOneMenu) {  
            ((SelectOneMenu) component).setDisabled(true);
        } else if(component instanceof SelectBooleanCheckbox) {  
            ((SelectBooleanCheckbox) component).setDisabled(true);
        } else if(component instanceof CommandButton) {  
            ((CommandButton) component).setDisabled(true);              
        }
        disableAll(component.getChildren());  
    }  
} 

那么你可以在你的豆子中使用它。这是一个有3个滚动面板的页面的例子,并且只想禁用panel1和panel3:

@PostConstruct
public void init() {        
    super.init();        
    Utils.disableUIComponent(":form:panel1");
    Utils.disableUIComponent(":form:panel3");
}

这是相关问题的链接

有很多方法可以做到。如果您正在使用主面,则可以使用<p:blockUI />组件。你可以自定义"禁用区域"的css样式。

查看官方演示:https://www.primefaces.org/showcase/ui/misc/blockUI.xhtml

如果你只需要让它们不可点击,也许javascript/jquery就足够了?

我看到有几种不同的方法:

添加SystemEvent被抛出时的disable属性:https://stackoverflow.com/a/15031242/1981358

创建一个自定义组件来环绕表单字段:https://stackoverflow.com/a/11453029/1981358https://stackoverflow.com/a/9543826/1981358

正如rags提到的,PF blockUI可以被使用,特别是当您需要在客户端事件处理期间限制访问时。

同样地,你可以用jQuery在页面上插入你自己的自定义"玻璃",这样可以防止任何点击(这确实会惹恼你的用户)。

相关内容

  • 没有找到相关文章

最新更新