Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用fxml字段的JavaFX数据绑定_Java_Javafx_Javafx 8_Javafx 2 - Fatal编程技术网

使用fxml字段的JavaFX数据绑定

使用fxml字段的JavaFX数据绑定,java,javafx,javafx-8,javafx-2,Java,Javafx,Javafx 8,Javafx 2,我已经为LoginForm创建了一个fxml文件以及一个控制器和模型。我尝试用fxml视图绑定模型,这样它就可以显示在TextField上,并且我可以返回输入值,比如SpringMVC。使用下面的代码,数据显示在TextField上,但我无法更改UI上的值 如何使用text属性创建可编辑的文本字段?或者我可以说如何将TextField与java模型绑定,以将输入数据发送到控制器 fxml代码: <fx:define> <LoginModel fx:id="loginModel"

我已经为LoginForm创建了一个fxml文件以及一个控制器和模型。我尝试用fxml视图绑定模型,这样它就可以显示在TextField上,并且我可以返回输入值,比如SpringMVC。使用下面的代码,数据显示在TextField上,但我无法更改UI上的值

如何使用
text
属性创建可编辑的文本字段?或者我可以说如何将TextField与java模型绑定,以将输入数据发送到控制器

fxml代码:

<fx:define>
<LoginModel fx:id="loginModel" />
</fx:define>
<Label text="Username" />
<TextField fx:id="username" GridPane.columnIndex="1" text="${loginModel.username}" editable="true" />
<Label text="Password" GridPane.rowIndex="1" />
<PasswordField fx:id="password" GridPane.columnIndex="1" GridPane.rowIndex="1" text="${loginModel.password}" />

在控制器中,我的用户名和密码总是为null。

绑定
节点
s的属性很可能是错误的方法。这些信息应该从用户界面中获取并放入
LoginModel
,而不是反过来。此外,您很可能希望等待用户单击某个按钮或按enter键来提交数据,而不是每次用户在
文本字段中键入字母时都这样做

您可能希望您的
BeanFactory
为您创建
LoginModel
,而不是使用
fxmloader
来创建它

final BeanFactory factory = ...
FXMLLoader loader = new FXMLLoader(url);
loader.setControllerFactory(cl -> {
    try {
        // use spring to create bean
        return factory.getBean(cl);
    } catch (NoSuchBeanDefinitionException ex) {
        // try create non-bean
        try {
            return cl.newInstance();
        } catch(InstantiationException | IllegalAccessException innerEx) {
            throw new RuntimeException(innerEx);
        }
    } catch (Exception ex) {
        throw new RuntimeException(ex);
    }
});
Parent p = loader.load();

username.getText()
或null时,您将获得NPE?您必须使用参数将用户名和密码传递给userService。像这个userService.login(用户名,密码)。我在action controller中得到null。
final BeanFactory factory = ...
FXMLLoader loader = new FXMLLoader(url);
loader.setControllerFactory(cl -> {
    try {
        // use spring to create bean
        return factory.getBean(cl);
    } catch (NoSuchBeanDefinitionException ex) {
        // try create non-bean
        try {
            return cl.newInstance();
        } catch(InstantiationException | IllegalAccessException innerEx) {
            throw new RuntimeException(innerEx);
        }
    } catch (Exception ex) {
        throw new RuntimeException(ex);
    }
});
Parent p = loader.load();
@Component
@Scope("prototype")
public class LoginController {

    @Autowired
    private LoginModel loginModel;

    @FXML
    private TextField username;

    @FXML
    private PasswordField password;

    @FXML
    private void login() {
        loginModel.login(username.getText(), password.getText());
        System.out.println("On login action");
    }

}