getNames() {
return names;
}
diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/mqDemo/MainController.java b/src/main/java/cn/edu/scau/biubiusuisui/example/mqDemo/MainController.java
index daea5f1..6db0696 100644
--- a/src/main/java/cn/edu/scau/biubiusuisui/example/mqDemo/MainController.java
+++ b/src/main/java/cn/edu/scau/biubiusuisui/example/mqDemo/MainController.java
@@ -28,7 +28,6 @@ public class MainController extends FXBaseController {
*/
@FXReceiver(name = "TopBarController:sendToMain")
public void handleTopBar(String msg) {
- // TODO: 2019/12/8
// 处理导航栏的点击事件
outTA.appendText(msg + "\n");
}
diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/redirectDemo/LoginController.java b/src/main/java/cn/edu/scau/biubiusuisui/example/redirectDemo/LoginController.java
index a4d4a19..ef9121d 100644
--- a/src/main/java/cn/edu/scau/biubiusuisui/example/redirectDemo/LoginController.java
+++ b/src/main/java/cn/edu/scau/biubiusuisui/example/redirectDemo/LoginController.java
@@ -4,10 +4,15 @@ import cn.edu.scau.biubiusuisui.annotation.FXController;
import cn.edu.scau.biubiusuisui.annotation.FXRedirect;
import cn.edu.scau.biubiusuisui.annotation.FXWindow;
import cn.edu.scau.biubiusuisui.entity.FXBaseController;
+import cn.edu.scau.biubiusuisui.entity.FXRedirectParam;
import javafx.fxml.FXML;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
/**
* @author suiyu_yang
* @description
@@ -41,9 +46,30 @@ public class LoginController extends FXBaseController {
}
@FXML
- @FXRedirect //登录成功
- public String redirectToSuccess() {
+ @FXRedirect //登录成功 Query方式
+ public String redirectToSuccessWithQuery() {
+ return "SuccessController?showType=0&username=" + usernameTF.getText() + "&password=" + passwordPF.getText();
+ }
- return "SuccessController";
+ @FXML
+ @FXRedirect //登录成功 Param方式
+ public FXRedirectParam redirectToSuccessWithParam() {
+ FXRedirectParam params = new FXRedirectParam("SuccessController");
+ params.addParam("username", usernameTF.getText());
+ params.addParam("password", passwordPF.getText());
+ params.addQuery("showType", "0");
+ return params;
+ }
+
+ @FXML
+ @FXRedirect
+ public FXRedirectParam redirectToSuccessWithAll() {
+ FXRedirectParam params = new FXRedirectParam("SuccessController");
+ params.addParam("username", usernameTF.getText());
+ params.addParam("password", passwordPF.getText());
+
+ params.addQuery("token", new Date().toString());
+ params.addQuery("showType", "0");
+ return params;
}
}
diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/redirectDemo/RegisterController.java b/src/main/java/cn/edu/scau/biubiusuisui/example/redirectDemo/RegisterController.java
index 8062484..3e6b407 100644
--- a/src/main/java/cn/edu/scau/biubiusuisui/example/redirectDemo/RegisterController.java
+++ b/src/main/java/cn/edu/scau/biubiusuisui/example/redirectDemo/RegisterController.java
@@ -4,6 +4,7 @@ import cn.edu.scau.biubiusuisui.annotation.FXController;
import cn.edu.scau.biubiusuisui.annotation.FXRedirect;
import cn.edu.scau.biubiusuisui.annotation.FXWindow;
import cn.edu.scau.biubiusuisui.entity.FXBaseController;
+import cn.edu.scau.biubiusuisui.entity.FXRedirectParam;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.PasswordField;
@@ -23,6 +24,7 @@ public class RegisterController extends FXBaseController {
@FXML
private TextField emailTF;
+
@FXML
private PasswordField passwordPF;
@@ -36,8 +38,8 @@ public class RegisterController extends FXBaseController {
userEntity.setUsername(usernameTF.getText());
userEntity.setPassword(passwordPF.getText());
userEntity.setEmail(emailTF.getText());
+ redirectToRegisterSuccess(userEntity);
}
-
}
@FXML
@@ -50,6 +52,13 @@ public class RegisterController extends FXBaseController {
return "LoginController";
}
+ @FXRedirect
+ public FXRedirectParam redirectToRegisterSuccess(UserEntity userEntity) {
+ FXRedirectParam fxRedirectParam = new FXRedirectParam("SuccessController");
+ fxRedirectParam.addQuery("showType", "1");
+ fxRedirectParam.addParam("user", userEntity);
+ return fxRedirectParam;
+ }
// 校验
private boolean validate() {
diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/redirectDemo/SuccessController.java b/src/main/java/cn/edu/scau/biubiusuisui/example/redirectDemo/SuccessController.java
index d356c8c..b5922a9 100644
--- a/src/main/java/cn/edu/scau/biubiusuisui/example/redirectDemo/SuccessController.java
+++ b/src/main/java/cn/edu/scau/biubiusuisui/example/redirectDemo/SuccessController.java
@@ -4,6 +4,7 @@ import cn.edu.scau.biubiusuisui.annotation.FXController;
import cn.edu.scau.biubiusuisui.annotation.FXRedirect;
import cn.edu.scau.biubiusuisui.annotation.FXWindow;
import cn.edu.scau.biubiusuisui.entity.FXBaseController;
+import cn.edu.scau.biubiusuisui.exception.NotFXWindowException;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
@@ -21,12 +22,17 @@ import java.util.ResourceBundle;
@FXWindow(title = "success")
public class SuccessController extends FXBaseController implements Initializable {
+ @FXML
+ private Label title;
+
@FXML
private Label usernameLabel;
@FXML
private Label passwordLabel;
+ @FXML
+ private Label tokenLabel;
@FXML
@FXRedirect
@@ -34,9 +40,35 @@ public class SuccessController extends FXBaseController implements Initializable
return "LoginController";
}
+ @Override
+ public void beforeShowStage() {
+ if (this.getQuery().get("showType") != null) {
+ String showType = (String) this.getQuery().get("showType");
+ if (showType.equals("1")) { //注册
+ title.setText("注册成功");
+ if (this.getParam().get("user") != null) {
+ UserEntity userEntity = (UserEntity) this.getParam().get("user");
+ usernameLabel.setText(userEntity.getUsername());
+ passwordLabel.setText(userEntity.getPassword());
+ }
+ } else { //登录
+ title.setText("登录成功");
+ // 此处为演示多种方式数据传递才进行多次赋值,实际应用时应根据数据API进行相应的数据获取操作
+ if (this.getQuery().size() > 1) { //query方式传递
+ usernameLabel.setText(String.valueOf(this.getQuery().get("username")));
+ passwordLabel.setText(String.valueOf(this.getQuery().get("password")));
+ tokenLabel.setText(String.valueOf(this.getQuery().get("token")));
+ }
+ if (this.getParam().size() > 1) { //param方式传递
+ usernameLabel.setText(String.valueOf(this.getParam().get("username")));
+ passwordLabel.setText(String.valueOf(this.getParam().get("password")));
+ }
+ }
+ }
+ }
+
@Override
public void initialize(URL location, ResourceBundle resources) {
}
-
}
diff --git a/src/main/java/cn/edu/scau/biubiusuisui/exception/InvalidURLException.java b/src/main/java/cn/edu/scau/biubiusuisui/exception/InvalidURLException.java
new file mode 100644
index 0000000..763400a
--- /dev/null
+++ b/src/main/java/cn/edu/scau/biubiusuisui/exception/InvalidURLException.java
@@ -0,0 +1,13 @@
+package cn.edu.scau.biubiusuisui.exception;
+
+/**
+ * @author suiyu_yang
+ * @description 不合法URL
+ * @date 2020/4/6 15:59
+ * @email suiyu_yang@163.com
+ */
+public class InvalidURLException extends Exception {
+ public InvalidURLException() {
+ super("the url is invalid");
+ }
+}
diff --git a/src/main/java/cn/edu/scau/biubiusuisui/exception/NotFXWindowException.java b/src/main/java/cn/edu/scau/biubiusuisui/exception/NotFXWindowException.java
new file mode 100644
index 0000000..74f2b54
--- /dev/null
+++ b/src/main/java/cn/edu/scau/biubiusuisui/exception/NotFXWindowException.java
@@ -0,0 +1,13 @@
+package cn.edu.scau.biubiusuisui.exception;
+
+/**
+ * @author suiyu_yang
+ * @description 某Controller不是窗口
+ * @date 2020/4/6 17:10
+ * @email suiyu_yang@163.com
+ */
+public class NotFXWindowException extends Exception {
+ public NotFXWindowException() {
+ super("the controller is not a window");
+ }
+}
diff --git a/src/main/java/cn/edu/scau/biubiusuisui/expression/action/ChangeParser.java b/src/main/java/cn/edu/scau/biubiusuisui/expression/action/ChangeParser.java
index 753d7be..81a75dd 100644
--- a/src/main/java/cn/edu/scau/biubiusuisui/expression/action/ChangeParser.java
+++ b/src/main/java/cn/edu/scau/biubiusuisui/expression/action/ChangeParser.java
@@ -13,5 +13,4 @@ public class ChangeParser implements BindParser {
}
-
}
diff --git a/src/main/java/cn/edu/scau/biubiusuisui/expression/data/ExpressionParser.java b/src/main/java/cn/edu/scau/biubiusuisui/expression/data/ExpressionParser.java
index 9e31c70..d4edf0b 100644
--- a/src/main/java/cn/edu/scau/biubiusuisui/expression/data/ExpressionParser.java
+++ b/src/main/java/cn/edu/scau/biubiusuisui/expression/data/ExpressionParser.java
@@ -5,13 +5,11 @@ import cn.edu.scau.biubiusuisui.annotation.FXValue;
import cn.edu.scau.biubiusuisui.exception.NoSuchChangeMethod;
import com.sun.istack.internal.NotNull;
import com.sun.javafx.fxml.expression.Expression;
-import com.sun.javafx.fxml.expression.VariableExpression;
import javafx.beans.property.Property;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
-import java.util.NoSuchElementException;
/**
* 将FXBind中表达式建立绑定
@@ -24,7 +22,7 @@ import java.util.NoSuchElementException;
* expression -> bean.field
*
* FXBind("text=${bean.field})
- * textProperty 通过 adapter.getModelProeprty --> textProperty实例
+ * textProperty 通过 adapter.getModelProperty --> textProperty实例
* bean 通过namespace 获取,因为bean有FXEntity标签,所以返回包装过后的bean的property
* 最后
* left.bind(right)
@@ -60,7 +58,7 @@ public class ExpressionParser {
private static final String FUNCTION_PREFIX = "@";
- private MyExpressionValue getRightExpreesion(MyBeanAdapter myBeanAdapter, String key, String rightExpression) {
+ private MyExpressionValue getRightExpression(MyBeanAdapter myBeanAdapter, String key, String rightExpression) {
Expression expression = null;
if (rightExpression.startsWith(FUNCTION_PREFIX)) {
expression = getFunctionExpression(rightExpression);
@@ -75,27 +73,27 @@ public class ExpressionParser {
private Expression getFunctionExpression(String rightExpression) {
Expression expression = null;
int indexLeft = rightExpression.indexOf("(");
- String methodName = rightExpression.substring(1,indexLeft);
+ String methodName = rightExpression.substring(1, indexLeft);
int indexRight = rightExpression.indexOf(")");
String argString = rightExpression.substring(indexLeft + 1, indexRight);
String[] args = null;
- if(!"".equals(argString.trim())) {
+ if (!"".equals(argString.trim())) {
args = argString.split(",");
}
- Class clazz = targetController.getClass();
- Method[] methods = clazz.getMethods();
- Expression[] expressions = null;
- if(args!=null) {
- expressions = new Expression[args.length];
+ Class targetClazz = targetController.getClass();
+ Method[] methods = targetClazz.getMethods();
+ Expression[] expressionArgs = null;
+ if (args != null) {
+ expressionArgs = new Expression[args.length];
for (int i = 0; i < args.length; i++) {
if (!"".equals(args[i].trim())) {
- expressions[i] = Expression.valueOf(args[i]);
+ expressionArgs[i] = Expression.valueOf(args[i]);
}
}
}
for (Method method : methods) {
if (method.getName().equals(methodName)) {
- expression = new FunctionExpression(method, targetController, expressions);
+ expression = new FunctionExpression(method, targetController, expressionArgs);
}
}
return expression;
@@ -120,7 +118,7 @@ public class ExpressionParser {
ExpressionType expressionType;
if (right.startsWith(BIND_PREFIX) && right.endsWith(BIND_SUFIX)) {
int length = right.length();
- right = right.substring(2, length - 1);
+ right = right.substring(2, length - 1); //已经去掉“${”的表达式
expressionType = ExpressionType.DataExpression;
} else {
right = right.substring(1); //#changeMethod -> changeMethod
@@ -133,12 +131,16 @@ public class ExpressionParser {
bindDataExpression(left, right, myBeanAdapter, leftProperty);
break;
case ActionExpression:
- //
bindActionExpression(right, leftProperty);
}
-
}
+ /**
+ * @param right
+ * @param leftProperty
+ * @throws NoSuchChangeMethod
+ * @Description 鼠标事件或键盘事件绑定
+ */
private void bindActionExpression(String right, Property leftProperty) throws NoSuchChangeMethod {
Class clazz = targetController.getClass();
Method[] methods = clazz.getMethods();
@@ -158,8 +160,15 @@ public class ExpressionParser {
}
}
+ /**
+ * @param left
+ * @param right
+ * @param myBeanAdapter
+ * @param leftProperty
+ * @Description 数据绑定
+ */
private void bindDataExpression(String left, String right, MyBeanAdapter myBeanAdapter, Property leftProperty) {
- MyExpressionValue rightProperty = getRightExpreesion(myBeanAdapter, left, right);
+ MyExpressionValue rightProperty = getRightExpression(myBeanAdapter, left, right);
leftProperty.bind(rightProperty);
}
diff --git a/src/main/java/cn/edu/scau/biubiusuisui/expression/data/FunctionExpression.java b/src/main/java/cn/edu/scau/biubiusuisui/expression/data/FunctionExpression.java
index 553600f..87a8439 100644
--- a/src/main/java/cn/edu/scau/biubiusuisui/expression/data/FunctionExpression.java
+++ b/src/main/java/cn/edu/scau/biubiusuisui/expression/data/FunctionExpression.java
@@ -16,9 +16,9 @@ public class FunctionExpression extends Expression {
private Method method;
private Object target;
- private Expression []args;
+ private Expression[] args;
- public FunctionExpression(Method method, Object target, Expression[]expressions) {
+ public FunctionExpression(Method method, Object target, Expression[] expressions) {
this.method = method;
this.target = target;
this.args = expressions;
@@ -27,7 +27,7 @@ public class FunctionExpression extends Expression {
@Override
public List getArguments() {
List list = new ArrayList<>();
- if(args !=null) {
+ if (args != null) {
for (Expression expression : args) {
list.addAll(expression.getArguments());
}
@@ -38,9 +38,9 @@ public class FunctionExpression extends Expression {
@Override
public Object evaluate(Object namespace) {
Object result = null;
- if(args!=null){
+ if (args != null) {
Object[] values = new Object[args.length];
- for(int i = 0 ;i {
+public class MyExpressionValue extends ObservableValueBase