是一次禁用或启用一组组件的任何方法。例如:我想禁用整个表单,它反过来有一对输入文本,下拉框,.....我希望能够同时禁用或启用所有这些
怎么做?而不是使用布尔变量和添加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在页面上插入你自己的自定义"玻璃",这样可以防止任何点击(这确实会惹恼你的用户)。