有什么方法可以同时禁用或启用一组组件。 例如:我想禁用整个表单,该表单又具有几个输入文本,下拉菜单,...... 我希望能够立即禁用或启用所有这些。
怎么做呢?而不是使用 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/