diff --git a/core/src/main/java/org/apache/struts2/components/UIBean.java b/core/src/main/java/org/apache/struts2/components/UIBean.java index c28e54c66..9dc4807f3 100644 --- a/core/src/main/java/org/apache/struts2/components/UIBean.java +++ b/core/src/main/java/org/apache/struts2/components/UIBean.java @@ -45,6 +45,7 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.function.Function; /** *
@@ -439,6 +440,8 @@ public abstract class UIBean extends Component {
private static final Logger LOG = LogManager.getLogger(UIBean.class);
protected static final String ATTR_FIELD_VALUE = "fieldValue";
+ protected static final String ATTR_NAME_VALUE = "nameValue";
+ protected static final String ATTR_VALUE = "value";
protected HttpServletRequest request;
protected HttpServletResponse response;
@@ -797,37 +800,7 @@ public abstract class UIBean extends Component {
addParameter("title", findString(title));
}
-
- // see if the value was specified as a parameter already
- final String NAME_VALUE = "nameValue";
- if (parameters.containsKey("value")) {
- parameters.put(NAME_VALUE, parameters.get("value"));
- } else {
- if (evaluateNameValue()) {
- final Class> valueClazz = getValueClassType();
-
- if (valueClazz != null) {
- if (value != null) {
- addParameter(NAME_VALUE, findValue(value, valueClazz));
- } else if (translatedName != null) {
- boolean evaluated = !translatedName.equals(this.name);
- boolean reevaluate = !evaluated || isAcceptableExpression(translatedName);
- if (!reevaluate) {
- addParameter(NAME_VALUE, translatedName);
- } else {
- String expr = completeExpression(translatedName);
- addParameter(NAME_VALUE, findValue(expr, valueClazz));
- }
- }
- } else {
- if (value != null) {
- addParameter(NAME_VALUE, findValue(value));
- } else if (translatedName != null) {
- addParameter(NAME_VALUE, findValue(translatedName));
- }
- }
- }
- }
+ applyValueParameter(translatedName);
final Form form = (Form) findAncestor(Form.class);
@@ -911,6 +884,46 @@ public abstract class UIBean extends Component {
evaluateExtraParams();
}
+ /**
+ * Tries to calculate the "value" parameter based either on the provided {@link #value} or {@link #name}
+ * @param translatedName the already evaluated {@link #name}
+ */
+ protected void applyValueParameter(String translatedName) {
+ // see if the value has been specified as a parameter already
+ if (parameters.containsKey(ATTR_VALUE)) {
+ parameters.put(ATTR_NAME_VALUE, parameters.get(ATTR_VALUE));
+ } else {
+ if (evaluateNameValue()) {
+ final Class> valueClazz = getValueClassType();
+
+ if (valueClazz != null) {
+ if (value != null) {
+ addParameter(ATTR_NAME_VALUE, findValue(value, valueClazz));
+ } else if (translatedName != null) {
+ processTranslatedName(translatedName, (expr) -> findValue(expr, valueClazz));
+ }
+ } else {
+ if (value != null) {
+ addParameter(ATTR_NAME_VALUE, findValue(value));
+ } else if (translatedName != null) {
+ processTranslatedName(translatedName, this::findValue);
+ }
+ }
+ }
+ }
+ }
+
+ private void processTranslatedName(String translatedName, Functionfalse
false
Boolean
- If set to true, unchecked elements will be submitted with the form. Since Struts 6.1.1 you can use a constant "struts.ui.checkbox.submitUnchecked" to set this property globally
+ If set to true, unchecked elements will be submitted with the form. Since Struts 6.1.1 you can use a constant "struts.ui.checkbox.submitUnchecked" to set this attribute globally
tabindex