jsf - 如何禁用或启用一组组件

标签 jsf primefaces

有什么方法可以同时禁用或启用一组组件。 例如:我想禁用整个表单,该表单又具有几个输入文本,下拉菜单,...... 我希望能够立即禁用或启用所有这些。

怎么做呢?而不是使用 bool 变量并向所有组件添加disable="#{booleanvariable}。 有没有其他方法可以将它们全部放在一个组件中并使其启用或禁用?

最佳答案

正如 @Kukeltje 在类似问题中告诉我的那样:“对于每个 jsf 的较新版本,请检查 massAttribute (来自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());  
    }  
} 

然后你就可以在你的 beans 中使用它了。这是一个具有 3 个滚动面板并且只想禁用 panel1 和 panel3 的页面的示例:

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

这是指向 related question 的链接

关于jsf - 如何禁用或启用一组组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16011481/

相关文章:

jsf - 错误 :/index. xhtml @30,146 <f :ajax> 'valueChange' is not a supported event for HtmlForm. 请指定 : click, dblclick、keydown 等之一

jsf - NPE 参数错误 : Parameter value is null (JSF) only when <h:head> is in page

jsf - 在 selectOneMenu 中使用枚举失败,返回 : 'Male' must be convertible to an enum

primefaces - Primefaces条形图导出为JPEG或PNG

jsf - 提交新请求时 primefaces 图表不更新

jsf - 在复合组件中创建 DataScroller 时出错

jsf - 在 JSF 中单击按钮异步调用长时间运行的进程

javascript - 检查 primefaces 中的数据表是否为空

java - 关于 JSF 2.0 自定义组件和 Primefaces 的帮助

jsf - Primefaces 多个对话框与 closeOnEscape