This is an automated email from the ASF dual-hosted git repository.
doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git
The following commit(s) were added to refs/heads/master by this push:
new 658bae96 EMPIREDB-431 SelectInputControl: check target type and some
code cleanup
658bae96 is described below
commit 658bae96da18d8aee284c300c97278b1792072b8
Author: Rainer Döbele <[email protected]>
AuthorDate: Mon Oct 21 19:12:54 2024 +0200
EMPIREDB-431
SelectInputControl: check target type
and some code cleanup
---
.../jakarta/controls/SelectInputControl.java | 48 ++++++++-------
.../empire/jakarta/pages/PageDefinition.java | 71 ++++++++++------------
.../apache/empire/jakarta/utils/ParameterMap.java | 19 ++++--
.../empire/jakarta/utils/TagEncodingHelper.java | 18 +++---
.../empire/jsf2/controls/SelectInputControl.java | 26 ++++----
.../apache/empire/jsf2/pages/PageDefinition.java | 60 ++++++++----------
.../empire/jsf2/utils/TagEncodingHelper.java | 18 +++---
7 files changed, 134 insertions(+), 126 deletions(-)
diff --git
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/controls/SelectInputControl.java
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/controls/SelectInputControl.java
index 326cb75c..af925718 100644
---
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/controls/SelectInputControl.java
+++
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/controls/SelectInputControl.java
@@ -22,17 +22,6 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
-import jakarta.el.ValueExpression;
-import jakarta.faces.component.UIComponent;
-import jakarta.faces.component.UIParameter;
-import jakarta.faces.component.UISelectItems;
-import jakarta.faces.component.UISelectOne;
-import jakarta.faces.component.html.HtmlSelectOneListbox;
-import jakarta.faces.component.html.HtmlSelectOneMenu;
-import jakarta.faces.context.FacesContext;
-import jakarta.faces.event.PhaseId;
-import jakarta.faces.model.SelectItem;
-
import org.apache.empire.commons.ObjectUtils;
import org.apache.empire.commons.OptionEntry;
import org.apache.empire.commons.Options;
@@ -44,13 +33,24 @@ import org.apache.empire.jakarta.utils.TagStyleClass;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import jakarta.el.ValueExpression;
+import jakarta.faces.component.UIComponent;
+import jakarta.faces.component.UIParameter;
+import jakarta.faces.component.UISelectItems;
+import jakarta.faces.component.UISelectOne;
+import jakarta.faces.component.html.HtmlSelectOneListbox;
+import jakarta.faces.component.html.HtmlSelectOneMenu;
+import jakarta.faces.context.FacesContext;
+import jakarta.faces.event.PhaseId;
+import jakarta.faces.model.SelectItem;
+
public class SelectInputControl extends InputControl
{
private static final Logger log =
LoggerFactory.getLogger(SelectInputControl.class);
public static final String COLATTR_ABBR_OPTIONS = "ABBR_OPTIONS";
// Option list for abbreviations
- public static final String VALUE_EXPRESSION_FLAG =
"VALUE_EXPRESSION_FLAG";
+ public static final String VALUE_EXPRESSION_TYPE =
"VALUE_EXPRESSION_TYPE";
public static final String FORMAT_SIZE = "size:";
@@ -101,9 +101,13 @@ public class SelectInputControl extends InputControl
// create list or menu
Object formatSize = getFormatOption(ii, FORMAT_SIZE, FORMAT_SIZE_ATTR);
UISelectOne input = createSelectComponent(parent, context, formatSize);
- // setValueExpressionFlag
+ // set ValueExpressionType
Object value = ii.getValue(false);
- input.getAttributes().put(SelectInputControl.VALUE_EXPRESSION_FLAG,
(value instanceof ValueExpression));
+ if (value instanceof ValueExpression)
+ { // Set target class
+ Class<?> exprType =
((ValueExpression)value).getType(context.getELContext());
+
input.getAttributes().put(SelectInputControl.VALUE_EXPRESSION_TYPE, exprType);
+ }
// copy Attributes
copyAttributes(parent, ii, input);
// disabled
@@ -129,9 +133,9 @@ public class SelectInputControl extends InputControl
}
UISelectOne input = (UISelectOne)comp;
// required
- addRemoveStyle(input, TagStyleClass.INPUT_REQ, ii.isRequired());
+ addRemoveStyle(input, TagStyleClass.INPUT_REQ, ii.isRequired());
// disabled
- boolean disabled = setDisabled(input, ii);
+ boolean disabled = setDisabled(input, ii);
// check phase
if (phaseId!=PhaseId.APPLY_REQUEST_VALUES)
{ // Options (sync)
@@ -339,10 +343,10 @@ public class SelectInputControl extends InputControl
}
// set value
Object value;
- Object valueExpressionFlag =
input.getAttributes().get(SelectInputControl.VALUE_EXPRESSION_FLAG);
- if (ObjectUtils.getBoolean(valueExpressionFlag))
+ Class<?> exprType =
(Class<?>)input.getAttributes().get(SelectInputControl.VALUE_EXPRESSION_TYPE);
+ if (exprType!=null)
{ // Use formatted value
- value = formatInputValue(oe.getValue());
+ value = formatInputValue(oe.getValue(), exprType);
}
else
{ // Convert to String
@@ -423,13 +427,13 @@ public class SelectInputControl extends InputControl
}
}
// the value
- return formatInputValue(value);
+ return formatInputValue(value, Object.class);
}
- protected Object formatInputValue(Object value)
+ protected Object formatInputValue(Object value, Class<?> targetClass)
{
// the enum Value
- if (value instanceof Enum<?>)
+ if ((value instanceof Enum<?>) && !targetClass.isEnum())
return ((Enum<?>) value).name();
// the value
return value;
diff --git
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/pages/PageDefinition.java
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/pages/PageDefinition.java
index 65d512ab..f155ebbd 100644
---
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/pages/PageDefinition.java
+++
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/pages/PageDefinition.java
@@ -28,48 +28,39 @@ import org.slf4j.LoggerFactory;
public class PageDefinition // *Deprecated* implements Serializable
{
- // *Deprecated* private static final long serialVersionUID = 1L;
+ // *Deprecated* private static final long serialVersionUID = 1L;
- private static final Logger log =
LoggerFactory.getLogger(PageDefinitions.class);
+ private static final Logger log =
LoggerFactory.getLogger(PageDefinitions.class);
private static final String ACTION_PARAMETER_TYPE = "ACTION";
+ private static final String ACTION_PARAMETER_NAME = "action";
private final String path;
private final String fileExtension;
- private final String pageBeanName;
+ private final String pageBeanName;
private final Class<? extends Page> pageBeanClass;
private final PageDefinition parent;
- /*
- private static Hashtable<String, String> actionCodeMap = new
Hashtable<String, String>();
-
- private static Hashtable<String, String> actionMap = new Hashtable<String,
String>();
-
- private static String encodeActionParam(String action)
- {
- String param = ParameterMap.encodeString(action);
- actionMap.put(param, action);
- return param;
- }
-
- public static String decodeActionParam(String param)
- {
- String action = actionMap.get(param);
- if (action==null)
- log.warn("no action available for param {}.", param);
- return action;
- }
- */
-
- private static String encodeActionParam(String action)
+ /**
+ * Encodes a page action method into a MD5 code and puts it on the
session's action list.
+ * @param pageDef the page for which the action is provided
+ * @param action the name of the action method
+ * @return the encoded action
+ */
+ private static String encodeActionParam(PageDefinition pageDef, String
action)
{
ParameterMap pm = FacesUtils.getParameterMap(FacesUtils.getContext());
if (pm==null)
return action;
- return pm.put(ACTION_PARAMETER_TYPE, action, true);
+ return pm.put(ACTION_PARAMETER_TYPE,
StringUtils.concat(pageDef.getPageBeanName(), ":", action), action, true);
}
-
+
+ /**
+ * Decodes a page action method from a MD5 code.
+ * @param param the MD5 code for a page action method
+ * @return the action method name
+ */
public static String decodeActionParam(String param)
{
ParameterMap pm = FacesUtils.getParameterMap(FacesUtils.getContext());
@@ -83,7 +74,7 @@ public class PageDefinition // *Deprecated* implements
Serializable
/**
* Constructs a page definition
- * @param path the path of the view associated with this page
+ * @param path the path of the view associated with this page
* @param pageBeanClass the page bean class associated with this page
* @param parent the parent page (if any). May be null
* @param pageBeanName the page bean name. If null this will be calculated
from the path
@@ -98,16 +89,16 @@ public class PageDefinition // *Deprecated* implements
Serializable
fileExtension = (ext>0) ? path.substring(ext) : null;
// beanName
if (pageBeanName==null)
- this.pageBeanName = getPageBeanNameFromPath(path,
fileExtension);
+ this.pageBeanName = getPageBeanNameFromPath(path, fileExtension);
else
- this.pageBeanName = pageBeanName;
+ this.pageBeanName = pageBeanName;
// add this view
PageDefinitions.registerPage(this);
}
/**
* Constructs a page definition
- * @param path the path of the view associated with this page
+ * @param path the path of the view associated with this page
* @param pageBeanClass the page bean class associated with this page
* @param pageBeanName the page bean name. If null this will be calculated
from the path
*/
@@ -118,7 +109,7 @@ public class PageDefinition // *Deprecated* implements
Serializable
/**
* Constructs a page definition
- * @param path the path of the view associated with this page
+ * @param path the path of the view associated with this page
* @param pageBeanClass the page bean class associated with this page
* @param parent the parent page (if any). May be null
*/
@@ -129,7 +120,7 @@ public class PageDefinition // *Deprecated* implements
Serializable
/**
* Constructs a page definition
- * @param path the path of the view associated with this page
+ * @param path the path of the view associated with this page
* @param pageBeanClass the page bean class associated with this page
*/
public PageDefinition(String path, Class<? extends Page> pageBeanClass)
@@ -143,7 +134,7 @@ public class PageDefinition // *Deprecated* implements
Serializable
int lastSlash = path.lastIndexOf('/');
String name = path.substring(lastSlash + 1);
if (extension!=null)
- name = name.substring(0,(name.length()-extension.length()));
+ name = name.substring(0,(name.length()-extension.length()));
return name;
}
@@ -154,8 +145,8 @@ public class PageDefinition // *Deprecated* implements
Serializable
public String getFileExtension()
{
- return fileExtension;
- }
+ return fileExtension;
+ }
public String getPageBeanName()
{
@@ -176,7 +167,7 @@ public class PageDefinition // *Deprecated* implements
Serializable
public PageOutcome getOutcome()
{
- String uri = PageDefinitions.getInstance().getPageUri(this);
+ String uri = PageDefinitions.getInstance().getPageUri(this);
return new PageOutcome(uri);
}
@@ -184,7 +175,7 @@ public class PageDefinition // *Deprecated* implements
Serializable
{
PageOutcome outcome = getOutcome();
if (StringUtils.isNotEmpty(action))
- outcome = outcome.addParam("action", encodeActionParam(action));
+ outcome = outcome.addParam(ACTION_PARAMETER_NAME,
encodeActionParam(this, action));
return outcome;
}
@@ -199,7 +190,7 @@ public class PageDefinition // *Deprecated* implements
Serializable
{
PageOutcome outcome = getRedirect();
if (StringUtils.isNotEmpty(action))
- outcome = outcome.addParam("action", encodeActionParam(action));
+ outcome = outcome.addParam(ACTION_PARAMETER_NAME,
encodeActionParam(this, action));
return outcome;
}
@@ -214,7 +205,7 @@ public class PageDefinition // *Deprecated* implements
Serializable
{
PageOutcome outcome = getRedirectWithViewParams();
if (StringUtils.isNotEmpty(action))
- outcome = outcome.addParam("action", encodeActionParam(action));
+ outcome = outcome.addParam(ACTION_PARAMETER_NAME,
encodeActionParam(this, action));
return outcome;
}
diff --git
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/ParameterMap.java
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/ParameterMap.java
index 18a9b3ec..cc8ad303 100644
---
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/ParameterMap.java
+++
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/ParameterMap.java
@@ -173,10 +173,10 @@ public class ParameterMap // *Deprecated* implements
Serializable
* @param useCache true if the keys should be cached
* @return the encoded key
*/
- public String put(String type, String key, boolean useCache)
+ public String put(String type, String key, String value, boolean useCache)
{
// Generate id and put in map
- return encodeAndStore(type, key, key, useCache);
+ return encodeAndStore(type, key, value, useCache);
}
public Object get(String type, String id)
@@ -195,9 +195,10 @@ public class ParameterMap // *Deprecated* implements
Serializable
/**
* Puts an object into the paramter map that implements the
ParameterObject interface
* @param paramObject the param object
+ * @param useCache flag whether to cache the objectKey
* @return the encoded object
*/
- public String put(ParameterObject paramObject)
+ public String put(ParameterObject paramObject, boolean useCache)
{
String objectKey;
// check param
@@ -205,7 +206,17 @@ public class ParameterMap // *Deprecated* implements
Serializable
throw new InvalidArgumentException("paramObject", paramObject);
// Generate id and put in map
String type = paramObject.getClass().getName();
- return encodeAndStore(type, objectKey, paramObject, false);
+ return encodeAndStore(type, objectKey, paramObject, useCache);
+ }
+
+ /**
+ * Puts an object into the paramter map that implements the
ParameterObject interface
+ * @param paramObject the param object
+ * @return the encoded object
+ */
+ public String put(ParameterObject paramObject)
+ {
+ return put(paramObject, false);
}
/**
diff --git
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/TagEncodingHelper.java
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/TagEncodingHelper.java
index 91628e3f..1aabb1b8 100644
---
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/TagEncodingHelper.java
+++
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/TagEncodingHelper.java
@@ -924,9 +924,13 @@ public class TagEncodingHelper implements NamingContainer
if (!(record instanceof Record))
return true;
}
- else if (!hasValueExpression())
- { // No Value expression given
- return true;
+ else
+ { // Value expression required
+ if (!hasValueExpression())
+ return true; // No Value expression given
+ // check attribute
+ Object val = getTagAttributeValue("readonly");
+ return ObjectUtils.getBoolean(val);
}
// check attribute
Object val = getTagAttributeValue("readonly");
@@ -1018,15 +1022,15 @@ public class TagEncodingHelper implements
NamingContainer
// Check Read-Only first
if (isReadOnly())
return false;
+ // Check Value Attribute
+ if (hasValueExpression())
+ return false;
// Check Record
if ((getRecord() instanceof Record))
{ // Ask Record
Record r = (Record) record;
return r.isValid() && r.isFieldRequired(getColumn());
}
- // Check Value Attribute
- if (hasValueExpression())
- return false;
// Required
return getColumn().isRequired();
}
@@ -1211,7 +1215,7 @@ public class TagEncodingHelper implements NamingContainer
return rec;
// Value expression
if (hasValueExpression())
- { // See if the record is in value
+ { // Value expression is provided instead.
return null;
}
// if parent is a record tag, get the record from there
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java
index 4223dc6f..ab04e73b 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java
@@ -50,7 +50,7 @@ public class SelectInputControl extends InputControl
public static final String COLATTR_ABBR_OPTIONS = "ABBR_OPTIONS";
// Option list for abbreviations
- public static final String VALUE_EXPRESSION_FLAG =
"VALUE_EXPRESSION_FLAG";
+ public static final String VALUE_EXPRESSION_TYPE =
"VALUE_EXPRESSION_TYPE";
public static final String FORMAT_SIZE = "size:";
@@ -101,9 +101,13 @@ public class SelectInputControl extends InputControl
// create list or menu
Object formatSize = getFormatOption(ii, FORMAT_SIZE, FORMAT_SIZE_ATTR);
UISelectOne input = createSelectComponent(parent, context, formatSize);
- // setValueExpressionFlag
+ // set ValueExpressionType
Object value = ii.getValue(false);
- input.getAttributes().put(SelectInputControl.VALUE_EXPRESSION_FLAG,
(value instanceof ValueExpression));
+ if (value instanceof ValueExpression)
+ { // Set target class
+ Class<?> exprType =
((ValueExpression)value).getType(context.getELContext());
+
input.getAttributes().put(SelectInputControl.VALUE_EXPRESSION_TYPE, exprType);
+ }
// copy Attributes
copyAttributes(parent, ii, input);
// disabled
@@ -129,9 +133,9 @@ public class SelectInputControl extends InputControl
}
UISelectOne input = (UISelectOne)comp;
// required
- addRemoveStyle(input, TagStyleClass.INPUT_REQ, ii.isRequired());
+ addRemoveStyle(input, TagStyleClass.INPUT_REQ, ii.isRequired());
// disabled
- boolean disabled = setDisabled(input, ii);
+ boolean disabled = setDisabled(input, ii);
// check phase
if (phaseId!=PhaseId.APPLY_REQUEST_VALUES)
{ // Options (sync)
@@ -339,10 +343,10 @@ public class SelectInputControl extends InputControl
}
// set value
Object value;
- Object valueExpressionFlag =
input.getAttributes().get(SelectInputControl.VALUE_EXPRESSION_FLAG);
- if (ObjectUtils.getBoolean(valueExpressionFlag))
+ Class<?> exprType =
(Class<?>)input.getAttributes().get(SelectInputControl.VALUE_EXPRESSION_TYPE);
+ if (exprType!=null)
{ // Use formatted value
- value = formatInputValue(oe.getValue());
+ value = formatInputValue(oe.getValue(), exprType);
}
else
{ // Convert to String
@@ -423,13 +427,13 @@ public class SelectInputControl extends InputControl
}
}
// the value
- return formatInputValue(value);
+ return formatInputValue(value, Object.class);
}
- protected Object formatInputValue(Object value)
+ protected Object formatInputValue(Object value, Class<?> targetClass)
{
// the enum Value
- if (value instanceof Enum<?>)
+ if ((value instanceof Enum<?>) && !targetClass.isEnum())
return ((Enum<?>) value).name();
// the value
return value;
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/PageDefinition.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/PageDefinition.java
index 1a559b99..59b28440 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/PageDefinition.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/PageDefinition.java
@@ -28,9 +28,9 @@ import org.slf4j.LoggerFactory;
public class PageDefinition // *Deprecated* implements Serializable
{
- // *Deprecated* private static final long serialVersionUID = 1L;
+ // *Deprecated* private static final long serialVersionUID = 1L;
- private static final Logger log =
LoggerFactory.getLogger(PageDefinitions.class);
+ private static final Logger log =
LoggerFactory.getLogger(PageDefinitions.class);
private static final String ACTION_PARAMETER_TYPE = "ACTION";
private static final String ACTION_PARAMETER_NAME = "action";
@@ -38,31 +38,16 @@ public class PageDefinition // *Deprecated* implements
Serializable
private final String path;
private final String fileExtension;
- private final String pageBeanName;
+ private final String pageBeanName;
private final Class<? extends Page> pageBeanClass;
private final PageDefinition parent;
- /*
- private static Hashtable<String, String> actionCodeMap = new
Hashtable<String, String>();
-
- private static Hashtable<String, String> actionMap = new Hashtable<String,
String>();
-
- private static String encodeActionParam(String action)
- {
- String param = ParameterMap.encodeString(action);
- actionMap.put(param, action);
- return param;
- }
-
- public static String decodeActionParam(String param)
- {
- String action = actionMap.get(param);
- if (action==null)
- log.warn("no action available for param {}.", param);
- return action;
- }
- */
-
+ /**
+ * Encodes a page action method into a MD5 code and puts it on the
session's action list.
+ * @param pageDef the page for which the action is provided
+ * @param action the name of the action method
+ * @return the encoded action
+ */
private static String encodeActionParam(PageDefinition pageDef, String
action)
{
ParameterMap pm = FacesUtils.getParameterMap(FacesUtils.getContext());
@@ -70,7 +55,12 @@ public class PageDefinition // *Deprecated* implements
Serializable
return action;
return pm.put(ACTION_PARAMETER_TYPE,
StringUtils.concat(pageDef.getPageBeanName(), ":", action), action, true);
}
-
+
+ /**
+ * Decodes a page action method from a MD5 code.
+ * @param param the MD5 code for a page action method
+ * @return the action method name
+ */
public static String decodeActionParam(String param)
{
ParameterMap pm = FacesUtils.getParameterMap(FacesUtils.getContext());
@@ -84,7 +74,7 @@ public class PageDefinition // *Deprecated* implements
Serializable
/**
* Constructs a page definition
- * @param path the path of the view associated with this page
+ * @param path the path of the view associated with this page
* @param pageBeanClass the page bean class associated with this page
* @param parent the parent page (if any). May be null
* @param pageBeanName the page bean name. If null this will be calculated
from the path
@@ -99,16 +89,16 @@ public class PageDefinition // *Deprecated* implements
Serializable
fileExtension = (ext>0) ? path.substring(ext) : null;
// beanName
if (pageBeanName==null)
- this.pageBeanName = getPageBeanNameFromPath(path,
fileExtension);
+ this.pageBeanName = getPageBeanNameFromPath(path, fileExtension);
else
- this.pageBeanName = pageBeanName;
+ this.pageBeanName = pageBeanName;
// add this view
PageDefinitions.registerPage(this);
}
/**
* Constructs a page definition
- * @param path the path of the view associated with this page
+ * @param path the path of the view associated with this page
* @param pageBeanClass the page bean class associated with this page
* @param pageBeanName the page bean name. If null this will be calculated
from the path
*/
@@ -119,7 +109,7 @@ public class PageDefinition // *Deprecated* implements
Serializable
/**
* Constructs a page definition
- * @param path the path of the view associated with this page
+ * @param path the path of the view associated with this page
* @param pageBeanClass the page bean class associated with this page
* @param parent the parent page (if any). May be null
*/
@@ -130,7 +120,7 @@ public class PageDefinition // *Deprecated* implements
Serializable
/**
* Constructs a page definition
- * @param path the path of the view associated with this page
+ * @param path the path of the view associated with this page
* @param pageBeanClass the page bean class associated with this page
*/
public PageDefinition(String path, Class<? extends Page> pageBeanClass)
@@ -144,7 +134,7 @@ public class PageDefinition // *Deprecated* implements
Serializable
int lastSlash = path.lastIndexOf('/');
String name = path.substring(lastSlash + 1);
if (extension!=null)
- name = name.substring(0,(name.length()-extension.length()));
+ name = name.substring(0,(name.length()-extension.length()));
return name;
}
@@ -155,8 +145,8 @@ public class PageDefinition // *Deprecated* implements
Serializable
public String getFileExtension()
{
- return fileExtension;
- }
+ return fileExtension;
+ }
public String getPageBeanName()
{
@@ -177,7 +167,7 @@ public class PageDefinition // *Deprecated* implements
Serializable
public PageOutcome getOutcome()
{
- String uri = PageDefinitions.getInstance().getPageUri(this);
+ String uri = PageDefinitions.getInstance().getPageUri(this);
return new PageOutcome(uri);
}
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
index d7e370c4..933db2bf 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
@@ -924,9 +924,13 @@ public class TagEncodingHelper implements NamingContainer
if (!(record instanceof Record))
return true;
}
- else if (!hasValueExpression())
- { // No Value expression given
- return true;
+ else
+ { // Value expression required
+ if (!hasValueExpression())
+ return true; // No Value expression given
+ // check attribute
+ Object val = getTagAttributeValue("readonly");
+ return ObjectUtils.getBoolean(val);
}
// check attribute
Object val = getTagAttributeValue("readonly");
@@ -1018,15 +1022,15 @@ public class TagEncodingHelper implements
NamingContainer
// Check Read-Only first
if (isReadOnly())
return false;
+ // Check Value Attribute
+ if (hasValueExpression())
+ return false;
// Check Record
if ((getRecord() instanceof Record))
{ // Ask Record
Record r = (Record) record;
return r.isValid() && r.isFieldRequired(getColumn());
}
- // Check Value Attribute
- if (hasValueExpression())
- return false;
// Required
return getColumn().isRequired();
}
@@ -1211,7 +1215,7 @@ public class TagEncodingHelper implements NamingContainer
return rec;
// Value expression
if (hasValueExpression())
- { // See if the record is in value
+ { // Value expression is provided instead.
return null;
}
// if parent is a record tag, get the record from there