JavaFX:在FXML中添加访问角色支持,而不对子类化控件

JavaFX:在FXML中添加访问角色支持,而不对子类化控件,javafx,fxml,Javafx,Fxml,我使用一个安全子系统来控制用户访问权限。(我的问题可能不取决于哪个,所以我们只假设在控制器(Java)端有一个方法,它可以判断当前用户是否具有给定的权限。) 我想在FXML级别控制表单上某些控件的行为和可访问性。大概是这样的: <Button ... disable="$controller.hasNotPermission" permission="permissionCode"> 或 其中,控制器的具有(非)权限方法将从调用方控件获取权限属性值,并根据用户角色对其进行检

我使用一个安全子系统来控制用户访问权限。(我的问题可能不取决于哪个,所以我们只假设在控制器(Java)端有一个方法,它可以判断当前用户是否具有给定的权限。)

我想在FXML级别控制表单上某些控件的行为和可访问性。大概是这样的:

<Button ... disable="$controller.hasNotPermission" permission="permissionCode">


其中,控制器的
具有(非)权限
方法将从调用方控件获取权限属性值,并根据用户角色对其进行检查

简单的方法是创建我自己的控件(PermissionControlledButton、PermissionControlledText等),并向它们添加此属性和支持函数。这种方法的问题是需要对几十个控制类进行子类化,并向所有这些类添加相同的代码(即使只有几行代码)

另外一种可能的方法是将此逻辑移动到我的控制器的
initilize
方法,并将它们绑定到那里


但是,如果有任何方法可以将此信息保留在FXML级别并避免子类化,我会发疯。

在控件上使用
userData
如何?使用userData解决了我一半的问题:我现在可以将权限传递给控制器。如果可以在FXML代码中调用方法(而不是引用属性),我就不知道什么。我的意思是,这样写:
AFAIK,您不能在
FXML
中指定动态值,要实现这一点,您需要在控制器中重载
initialize()
,访问fxml组件并更改它们的属性最终我采用了这种方法。我将配置移到了控制器级别,并在initialize方法中执行。在我的例子中,它甚至更安全,因为将权限分配移动到fxml端将在JAR中的纯文本文件中公开它,并且比反向工程编译代码更容易处理。:-)
<Text ... visible="$controller.hasPermission" permission="permissionCode">