public static <T extends ICrudDataAction<?, ?>, E extends IBaseEntity> CommandLink createCommandLink(T action, E entity, String id, String title, StyleClassMasterType styleClass, String nameMethod, Class<? extends Predicate> predicateRendered, Class<? extends Predicate> predicateDisabled) {
CommandLink commandLink = new CommandLink();
commandLink.setId("commandLinkDynamic_" + id);
commandLink.setValue(BundleUtils.messageBundle(title));
commandLink.setStyleClass(styleClass.getStyleClass());
commandLink.setStyle(STYLE_COMMANDLINK);
commandLink.setUpdate("@composite, @(.base-messageheader)");
commandLink.setOnstart("showMessageProcess(true)");
commandLink.setOnerror("hideMessageProcess(false)");
commandLink.setOncomplete("hideMessageProcess(false)");
String methodExpressionLanguage = "" +
"#{" +
action.getClass().getSimpleName().substring(0, 1).toLowerCase() +
action.getClass().getSimpleName().substring(1) +
".callMethodDynamic('" + nameMethod + "')}";
commandLink.setActionExpression(createMethodExpression(methodExpressionLanguage));
evaluateRenderDisabled(entity, commandLink, predicateRendered, predicateDisabled);
return commandLink;
}