Table tree in struts.
Hi All,
Please help me to create table tree in struts.
Please see the below example.
+----Parent 50 20
|___Child1 40 10
|___Child2 30 33
java_jamboree wrote:
mind blowing i did not know Struts provides the UI framework to create widgets:-) you've been here too long, the sarcasm's beginning to rub off on you!
Similar Messages
-
Is Paginated Tree-Table/Tree supported using ProgramaticVO
I have question Is Paginated Tree-Table/Tree supported using Programmatic View Object technique (http://docs.oracle.com/cd/E21043_01/web.1111/b31974/bcadvvo.htm#sm0341)
Thanks Timo for reply, let me add more details to the question, i wanted to know if we have a tree/tree-table build using paginated VO, is the pagination will work for the sub nodes in the tree/tree-table i.e if we have child itself has 100 of rows and when we expand child, will pagination work?
I am also looking for some input/examples if someone has tried paginated tree using programmatic VO.
Thanks
..Sunil -
Table/tree table refresh issue
I create a table and tree table, we see the refresh happen when adding or deleting a row. We are trying to reach the following behavior:
1) when adding a row, it should add (before or after or END) and scroll to that location and put focus on that row. In a simple case where we do not have to scroll down to some page, this should present minimal refresh
2) Deleting a row or multiple rows, should present minimal refresh
3) we don't want to fetch at all for ADD and delete rows. Only in pagination scrolling we should fetch.
Does anyone have the similar requirement for the behavior of Table /Tree table?
how do you achieve that ?Hi KRISHNA,
there is no other way as a complete page refresh with the normal APEX trees. But you could use an javascript library instead like JQuery or ExtJS.
More details here: [http://apex-at-work.blogspot.com/2009/08/apex-navigation-concepts.html|http://apex-at-work.blogspot.com/2009/08/apex-navigation-concepts.html]
or here: [http://www.e-dba.com/uk/f?p=105:1|http://www.e-dba.com/uk/f?p=105:1]
or here: [http://bassistance.de/jquery-plugins/jquery-plugin-treeview/|http://bassistance.de/jquery-plugins/jquery-plugin-treeview/]
Best regards,
Tobias -
Dear Developers,
I am looking for any documentation (source codes, technical documentation... etc) for the creation of a table tree with WDA. I only found a documentation for Java. I've also read that there is some documentation which is being written about this subject. Has it been published yet ?
Sincerely,
Olivier MATTHi,
see <a href="http://help.sap.com/saphelp_nw2004s/helpdata/en/b5/ac884118aa1709e10000000a155106/frameset.htm">here</a>, there's also the information on TreeByKeyTableColumn and TreeByIndexTableColumn underneath.
See also the example WDR_TEST_TABLE in the system.
Regards, Heidi -
Agentry complex table tree additional field
Hello)
I added for complex table one field and modified the sql. Now I'm trying to make that field to be displayed in complex table tree. I modified tree format as "%location - %myNewField" but in the Test environment it is shown as "1000 - err:myNewField". What else I need to check? I don't want to modify indexes, cause they are fine as is. I just need additional data to be present.ok, I made it =) for some reason when my field name was "CUS_business" - it couldn't understand it, so when I renamed table field to "cusbusiness" - it works
-
Complex Table Tree Button Image
Hi all,
it seems that with SMP SDK 3.0 SP7, the styles for the comlex table tree dialog are supported for the WPF client (yay!). Unfortunately, the button for opening that dialog () is still pretty small for the average thumb. Is there any way to replace that image?
Regards, DanielDaniel,
The engineering team is working on making the WPF client more touch friendly. You may have already noticed some changes in SDK SP07/PL01 where spacing is increased in rows for drop downs, lists, etc. I believe there are also more changes planned for SP08 as well in this regard.
The only thing you could try would be in the editor under Application Settings the checkbox for Use Large Buttons. I do not know if this will affect the WPF client or not. You would just need to test it out and see.
Support is also working on a note to detail out some of the changes being made to make the WPF client more touch friendly.
--Bill -
Why dynamic table creation with struts working only for JDK1.3.1_02 version
Row
import java.util.Vector;
public class Row
private static int colsize;
private Column[] columns;
public void setColumns(Column[] columns)
System.out.println("SetColumns");
this.columns = columns;
public void setColumn(int i, Column column)
System.out.println("setting"+ i+"th column"+column);
public Column[] getColumns()
return null;
public Column getColumns(int i)
System.out.println("Column"+i);
System.out.println("Colsize"+colsize);
if(columns == null)
columns= new Column[colsize];
if(columns[i] == null)
columns[i] = new Column();
return columns;
public int getColsize()
return colsize;
public static void setColsize(int size)
colsize = size;
Column:
public class Column
private String value;
public void setValue(String value)
System.out.println("Value="+value);
this.value = value;
public String getValue()
return value;
ApplicationResources:
button.cancel=Cancel
button.confirm=Confirm
button.reset=Reset
button.save=Save
database.load=Cannot load database from {0}
error.database.missing=<li>User database is missing, cannot validate logon credentials</li>
error.fromAddress.format=<li>Invalid format for From Address</li>
error.fromAddress.required=<li>From Address is required</li>
error.fullName.required=<li>Full Name is required</li>
error.host.required=<li>Mail Server is required</li>
error.noSubscription=<li>No Subscription bean in user session</li>
error.password.required=<li>Password is required</li>
error.password2.required=<li>Confirmation password is required</li>
error.password.match=<li>Password and confirmation password must match</li>
error.password.mismatch=<li>Invalid username and/or password, please try again</li>
error.replyToAddress.format=<li>Invalid format for Reply To Address</li>
error.transaction.token=<li>Cannot submit this form out of order</li>
error.type.invalid=<li>Server Type must be 'imap' or 'pop3'</li>
error.type.required=<li>Server Type is required</li>
error.username.required=<li>Username is required</li>
error.username.unique=<li>That username is already in use - please select another</li>
errors.footer=</ul><hr>
errors.header=<h3><font color="red">Validation Error</font></h3>You must correct the following error(s) before proceeding:<ul>
errors.ioException=I/O exception rendering error messages: {0}
heading.autoConnect=Auto
heading.subscriptions=Current Subscriptions
heading.host=Host Name
heading.user=User Name
heading.type=Server Type
heading.action=Action
index.heading=MailReader Demonstration Application Options
index.logon=Log on to the MailReader Demonstration Application
index.registration=Register with the MailReader Demonstration Application
index.title=MailReader Demonstration Application (Struts 1.0-b1)
index.tour=A Walking Tour of the Example Application
linkSubscription.io=I/O Error: {0}
linkSubscription.noSubscription=No subscription under attribute {0}
linkUser.io=I/O Error: {0}
linkUser.noUser=No user under attribute {0}
logon.title=MailReader Demonstration Application - Logon
mainMenu.heading=Main Menu Options for
mainMenu.logoff=Log off MailReader Demonstration Application
mainMenu.registration=Edit your user registration profile
mainMenu.title=MailReader Demonstration Application - Main Menu
option.imap=IMAP Protocol
option.pop3=POP3 Protocol
prompt.autoConnect=Auto Connect:
prompt.fromAddress=From Address:
prompt.fullName=Full Name:
prompt.mailHostname=Mail Server:
prompt.mailPassword=Mail Password:
prompt.mailServerType=Server Type:
prompt.mailUsername=Mail Username:
prompt.password=Password:
prompt.password2=(Repeat) Password:
prompt.replyToAddress=Reply To Address:
prompt.username=Username:
registration.addSubscription=Add
registration.deleteSubscription=Delete
registration.editSubscription=Edit
registration.title.create=Register for the MailReader Demostration Application
registration.title.edit=Edit Registration for the MailReader Demonstration Application
subscription.title.create=Create New Mail Subscription
subscription.title.delete=Delete Existing Mail Subscription
subscription.title.edit=Edit Existing Mail Subscription
LogonForm
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
public class LogonForm extends ActionForm
private String username;
private String password;
private String errors;
public String getUsername()
return username;
public void setUsername(String username)
this.username = username;
public void setPassword(String password)
this.password = password;
public String getPassword()
return password;
public String getErrors()
return errors;
public void setErrors(String errors)
this.errors = errors;
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if ((username == null) || (username.length() < 1))
errors.add("username", new ActionError("error.username.required"));
if ((password == null) || (password.length() < 1))
errors.add("password", new ActionError("error.password.required"));
return errors;
TableForm
import org.apache.struts.action.ActionForm;
import java.util.Vector;
public class TableForm extends ActionForm
private static int rowsize;
private Row[] rows;
public Row getRows(int i)
System.out.println("Row"+i);
System.out.println("Rowsize"+rowsize);
if(rows == null)
rows = new Row[rowsize];
if(rows[i] == null)
rows[i] = new Row();
return rows[i];
public Row[] getRows()
return null;
public void setRows(Row[] rows)
System.out.println("SetRows");
// this.rows=rows;
public static void setRowsize(int size)
rowsize = size;
public int getRowSize()
return rowsize;
LogonAction
import java.io.IOException;
import java.util.Hashtable;
import java.util.Locale;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.util.MessageResources;
public class LogonAction extends Action
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
LogonForm logonForm = (LogonForm) form;
System.out.println(logonForm);
System.out.println(logonForm.getUsername());
System.out.println(logonForm.getPassword());
if(logonForm.getUsername().equals("test") && logonForm.getPassword().equals("test"))
//TableForm tform = new TableForm();
//tform.setRowsize(2);
//tform.getRows(0).setColsize(2);
//tform.getRows(1).setColsize(2);
//request.getSession().setAttribute("tableForm",tform);
System.out.println("Table Form setRowSize");
TableForm.setRowsize(2);
System.out.println("Table Form set ColSize");
Row.setColsize(2);
System.out.println("Returning success");
return mapping.findForward("success");
else
ActionErrors errors = new ActionErrors();
errors.add("password",
new ActionError("error.password.mismatch"));
saveErrors(request, errors);
//logonForm.setErrors("LoginError");
return mapping.findForward("failure");
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">
<!--
This is the Struts configuration file for the example application,
using the proposed new syntax.
NOTE: You would only flesh out the details in the "form-bean"
declarations if you had a generator tool that used them to create
the corresponding Java classes for you. Otherwise, you would
need only the "form-bean" element itself, with the corresponding
"name" and "type" attributes.
-->
<struts-config>
<form-beans>
<!-- Logon form bean -->
<form-bean name="logonForm"
type="LogonForm"/>
<form-bean name="tableForm"
type="TableForm"/>
<form-bean name="profileForm"
type="ProfileForm"/>
</form-beans>
<global-forwards>
<forward name="success" path="/Profile.jsp"/>
</global-forwards>
<!-- ========== Action Mapping Definitions ============================== -->
<action-mappings>
<!-- Edit user registration -->
<action path="/logon"
type="LogonAction"
name="logonForm"
scope="request"
validate="false"
input="/Test.jsp">
<forward name="success" path="/Table.jsp"/>
<forward name="failure" path="/Test.jsp"/>
</action>
<action path="/table"
type="TableAction"
name="tableForm"
scope="request"
validate="false">
<forward name="success" path="/Bean.jsp"/>
<forward name="failure" path="/Table.jsp"/>
</action>
<action path="/profile"
type="ProfileAction"
name="profileForm"
scope="request"
validate="false"
parameter="method">
<forward name="edit" path="/EditProfile.jsp"/>
<forward name="show" path="/Profile.jsp"/>
</action>
</action-mappings>
</struts-config>
Test.jsp
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html:html locale="true">
<html:form action="/logon" >
<center>
<table>
<tr>
<td> Username </td>
<td> <html:text property="username" size="16" maxlength="16"/> </td>
<td> <html:errors property="username" /> </td>
</tr>
<tr>
<td> Password </td>
<td> <html:password property="password" size="16" maxlength="16"
redisplay="false"/> </td>
<td><html:errors property="password" /> </td>
</tr>
</table>
</center>
<center> <html:submit property="submit" value="Submit"/> </center>
</html:form>
</html:html>
Table.jsp
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html:html locale="true">
<html:form action="/table" >
<center>
<table>
<tr>
<td> <html:text property="rows[0].columns[0].value" /> </td>
<td> <html:text property="rows[0].columns[1].value" /></td>
</tr>
<tr>
<td> <html:text property="rows[1].columns[0].value" /> </td>
<td> <html:text property="rows[1].columns[1].value" /></td>
</tr>
</table>
</center>
<center> <html:submit property="submit" value="Submit"/> </center>
</html:form>
</html:html>The above application runs only with JDK1.3.1_02 and not with any other version. This application is creating dynamic table using struts.
Can anybody help me on the same
also appending web.xml contents:
<?xml version="1.0" ?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<!-- Action Servlet Configuration -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>validate</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!--Welcome file list starts here -->
<welcome-file-list>
<welcome-file>
/test.jsp
</welcome-file>
</welcome-file-list>
<!-- Struts Tag Library Descriptors -->
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
</web-app>
validate-rules.xml
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
<!--
This file contains the default Struts Validator pluggable validator
definitions. It should be placed somewhere under /WEB-INF and
referenced in the struts-config.xml under the plug-in element
for the ValidatorPlugIn.
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml"/>
</plug-in>
These are the default error messages associated with
each validator defined in this file. They should be
added to your projects ApplicationResources.properties
file or you can associate new ones by modifying the
pluggable validators msg attributes in this file.
# Struts Validator Error Messages
errors.required={0} is required.
errors.minlength={0} can not be less than {1} characters.
errors.maxlength={0} can not be greater than {1} characters.
errors.invalid={0} is invalid.
errors.byte={0} must be a byte.
errors.short={0} must be a short.
errors.integer={0} must be an integer.
errors.long={0} must be a long.
errors.float={0} must be a float.
errors.double={0} must be a double.
errors.date={0} is not a date.
errors.range={0} is not in the range {1} through {2}.
errors.creditcard={0} is an invalid credit card number.
errors.email={0} is an invalid e-mail address.
-->
<form-validation>
<global>
<validator name="required"
classname="org.apache.struts.validator.FieldChecks"
method="validateRequired"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
msg="errors.required">
<javascript><![CDATA[
function validateRequired(form) {
var isValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oRequired = new required();
for (x in oRequired) {
var field = form[oRequired[x][0]];
if (field.type == 'text' ||
field.type == 'textarea' ||
field.type == 'file' ||
field.type == 'select-one' ||
field.type == 'radio' ||
field.type == 'password') {
var value = '';
// get field's value
if (field.type == "select-one") {
var si = field.selectedIndex;
if (si >= 0) {
value = field.options[si].value;
} else {
value = field.value;
if (trim(value).length == 0) {
if (i == 0) {
focusField = field;
fields[i++] = oRequired[x][1];
isValid = false;
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
return isValid;
// Trim whitespace from left and right sides of s.
function trim(s) {
return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
]]>
</javascript>
</validator>
<validator name="requiredif"
classname="org.apache.struts.validator.FieldChecks"
method="validateRequiredIf"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
org.apache.commons.validator.Validator,
javax.servlet.http.HttpServletRequest"
msg="errors.required">
</validator>
<validator name="minlength"
classname="org.apache.struts.validator.FieldChecks"
method="validateMinLength"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends=""
msg="errors.minlength">
<javascript><![CDATA[
function validateMinLength(form) {
var isValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oMinLength = new minlength();
for (x in oMinLength) {
var field = form[oMinLength[x][0]];
if (field.type == 'text' ||
field.type == 'textarea') {
var iMin = parseInt(oMinLength[x][2]("minlength"));
if ((trim(field.value).length > 0) && (field.value.length < iMin)) {
if (i == 0) {
focusField = field;
fields[i++] = oMinLength[x][1];
isValid = false;
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
return isValid;
}]]>
</javascript>
</validator>
<validator name="maxlength"
classname="org.apache.struts.validator.FieldChecks"
method="validateMaxLength"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends=""
msg="errors.maxlength">
<javascript><![CDATA[
function validateMaxLength(form) {
var isValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oMaxLength = new maxlength();
for (x in oMaxLength) {
var field = form[oMaxLength[x][0]];
if (field.type == 'text' ||
field.type == 'textarea') {
var iMax = parseInt(oMaxLength[x][2]("maxlength"));
if (field.value.length > iMax) {
if (i == 0) {
focusField = field;
fields[i++] = oMaxLength[x][1];
isValid = false;
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
return isValid;
}]]>
</javascript>
</validator>
<validator name="mask"
classname="org.apache.struts.validator.FieldChecks"
method="validateMask"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends=""
msg="errors.invalid">
<javascript><![CDATA[
function validateMask(form) {
var isValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oMasked = new mask();
for (x in oMasked) {
var field = form[oMasked[x][0]];
if ((field.type == 'text' ||
field.type == 'textarea') &&
(field.value.length > 0)) {
if (!matchPattern(field.value, oMasked[x][2]("mask"))) {
if (i == 0) {
focusField = field;
fields[i++] = oMasked[x][1];
isValid = false;
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
return isValid;
function matchPattern(value, mask) {
return mask.exec(value);
}]]>
</javascript>
</validator>
<validator name="byte"
classname="org.apache.struts.validator.FieldChecks"
method="validateByte"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends=""
msg="errors.byte"
jsFunctionName="ByteValidations">
<javascript><![CDATA[
function validateByte(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oByte = new ByteValidations();
for (x in oByte) {
var field = form[oByte[x][0]];
if (field.type == 'text' ||
field.type == 'textarea' ||
field.type == 'select-one' ||
field.type == 'radio') {
var value = '';
// get field's value
if (field.type == "select-one") {
var si = field.selectedIndex;
if (si >= 0) {
value = field.options[si].value;
} else {
value = field.value;
if (value.length > 0) {
if (!isAllDigits(value)) {
bValid = false;
if (i == 0) {
focusField = field;
fields[i++] = oByte[x][1];
} else {
var iValue = parseInt(value);
if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) {
if (i == 0) {
focusField = field;
fields[i++] = oByte[x][1];
bValid = false;
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
return bValid;
}]]>
</javascript>
</validator>
<validator name="short"
classname="org.apache.struts.validator.FieldChecks"
method="validateShort"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends=""
msg="errors.short"
jsFunctionName="ShortValidations">
<javascript><![CDATA[
function validateShort(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oShort = new ShortValidations();
for (x in oShort) {
var field = form[oShort[x][0]];
if (field.type == 'text' ||
field.type == 'textarea' ||
field.type == 'select-one' ||
field.type == 'radio') {
var value = '';
// get field's value
if (field.type == "select-one") {
var si = field.selectedIndex;
if (si >= 0) {
value = field.options[si].value;
} else {
value = field.value;
if (value.length > 0) {
if (!isAllDigits(value)) {
bValid = false;
if (i == 0) {
focusField = field;
fields[i++] = oShort[x][1];
} else {
var iValue = parseInt(value);
if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) {
if (i == 0) {
focusField = field;
fields[i++] = oShort[x][1];
bValid = false;
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
return bValid;
}]]>
</javascript>
</validator>
<validator name="integer"
classname="org.apache.struts.validator.FieldChecks"
method="validateInteger"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends=""
msg="errors.integer"
jsFunctionName="IntegerValidations">
<javascript><![CDATA[
function validateInteger(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oInteger = new IntegerValidations();
for (x in oInteger) {
var field = form[oInteger[x][0]];
if (field.type == 'text' ||
field.type == 'textarea' ||
field.type == 'select-one' ||
field.type == 'radio') {
var value = '';
// get field's value
if (field.type == "select-one") {
var si = field.selectedIndex;
if (si >= 0) {
value = field.options[si].value;
} else {
value = field.value;
if (value.length > 0) {
if (!isAllDigits(value)) {
bValid = false;
if (i == 0) {
focusField = field;
fields[i++] = oInteger[x][1];
} else {
var iValue = parseInt(value);
if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
if (i == 0) {
focusField = field;
fields[i++] = oInteger[x][1];
bValid = false;
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
return bValid;
function isAllDigits(argvalue) {
argvalue = argvalue.toString();
var validChars = "0123456789";
var startFrom = 0;
if (argvalue.substring(0, 2) == "0x") {
validChars = "0123456789abcdefABCDEF";
startFrom = 2;
} else if (argvalue.charAt(0) == "0") {
validChars = "01234567";
startFrom = 1;
} else if (argvalue.charAt(0) == "-") {
startFrom = 1;
for (var n = startFrom; n < argvalue.length; n++) {
if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
return true;
}]]>
</javascript>
</validator>
<validator name="long"
classname="org.apache.struts.validator.FieldChecks"
method="validateLong"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends=""
msg="errors.long"/>
<validator name="float"
classname="org.apache.struts.validator.FieldChecks"
method="validateFloat"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends=""
msg="errors.float"
jsFunctionName="FloatValidations">
<javascript><![CDATA[
function validateFloat(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oFloat = new FloatValidations();
for (x in oFloat) {
var field = form[oFloat[x][0]];
if (field.type == 'text' ||
field.type == 'textarea' ||
field.type == 'select-one' ||
field.type == 'radio') {
var value = '';
// get field's value
if (field.type == "select-one") {
var si = field.selectedIndex;
if (si >= 0) {
value = field.options[si].value;
} else {
value = field.value;
if (value.length > 0) {
// remove '.' before checking digits
var tempArray = value.split('.');
var joinedString= tempArray.join('');
if (!isAllDigits(joinedString)) {
bValid = false;
if (i == 0) {
focusField = field;
fields[i++] = oFloat[x][1];
} else {
var iValue = parseFloat(value);
if (isNaN(iValue)) {
if (i == 0) {
focusField = field;
fields[i++] = oFloat[x][1];
bValid = false;
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
return bValid;
}]]>
</javascript>
</validator>
<validator name="double"
classname="org.apache.struts.validator.FieldChecks"
method="validateDouble"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends=""
msg="errors.double"/>
<validator name="date"
classname="org.apache.struts.validator.FieldChecks"
method="validateDate"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends=""
msg="errors.date"
jsFunctionName="DateValidations">
<javascript><![CDATA[
function validateDate(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oDate = new DateValidations();
for (x in oDate) {
var value = form[oDate[x][0]].value;
var datePattern = oDate[x][2]("datePatternStrict");
if ((form[oDate[x][0]].type == 'text' ||
form[oDate[x][0]].type == 'textarea') &&
(value.length > 0) &&
(datePattern.length > 0)) {
var MONTH = "MM";
var DAY = "dd";
var YEAR = "yyyy";
var orderMonth = datePattern.indexOf(MONTH);
var orderDay = datePattern.indexOf(DAY);
var orderYear = datePattern.indexOf(YEAR);
if ((orderDay < orderYear && orderDay > orderMonth)) {
var iDelim1 = orderMonth + MONTH.length;
var iDelim2 = orderDay + DAY.length;
var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
if (iDelim1 == orderDay && iDelim2 == orderYear) {
dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
} else if (iDelim1 == orderDay) {
dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
} else if (iDelim2 == orderYear) {
dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
} else {
dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
var matched = dateRegexp.exec(value);
if(matched != null) {
if (!isValidDate(matched[2], matched[1], matched[3])) {
if (i == 0) {
focusField = form[oDate[x][0]];
fields[i++] = oDate[x][1];
bValid = false;
} else {
if (i == 0) {
focusField = form[oDate[x][0]];
fields[i++] = oDate[x][1];
bValid = false;
} else if ((orderMonth < orderYear && orderMonth > orderDay)) {
var iDelim1 = orderDay + DAY.length;
var iDelim2 = orderMonth + MONTH.length;
var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
if (iDelim1 == orderMonth && iDelim2 == orderYear) {
dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
} else if (iDelim1 == orderMonth) {
dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
} else if (iDelim2 == orderYear) {
dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
} else {
dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
var matched = dateRegexp.exec(value);
if(matched != null) {
if (!isValidDate(matched[1], matched[2], matched[3])) {
if (i == 0) {
focusField = form[oDate[x][0]];
fields[i++] = oDate[x][1];
bValid = false;
} else {
if (i == 0) {
focusField = form[oDate[x][0]];
fields[i++] = oDate[x][1];
bValid = false;
} else if ((orderMonth > orderYear && orderMonth < orderDay)) {
var iDelim1 = orderYear + YEAR.length;
var iDelim2 = orderMonth + MONTH.length;
var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
if (iDelim1 == orderMonth && iDelim2 == orderDay) {
dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
} else if (iDelim1 == orderMonth) {
dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");
} else if (iDelim2 == orderDay) {
dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");
} else {
dateRegexp = new Reg -
Clickable UI element in a table tree as a child
Hi experts,
I haev created a tree in a table column. And in a treebykeytable coumn of a table, what type of cell editor can be included so that we can capture a event on a click of it.
I.e once a child is clicked- I want to caoture the value of child clicked and navigate further.
I dont want to use linktoaction UI element and moreover table need initialze lead selection and on using linktoaction, for clicking any child it capture only root value i.e lead selected by default.
Thanks
Depeshhttps://www.sdn.sap.com/irj/sdn/nw-70
would help you
regards
nag -
Error in Webdynpro ABAP Table Tree
Hi,
I am using Table UI element in Webdynpro ABAP. I am showing data in tree format using element Treebykeytablecolumn.
I have full tree structure loaded in begining of the code so don't need to load child on expansion of key. Since I have data already loaded, am setting attribute CHILDREN_LOADED as true.
First row comes in table perfectly, but on expansion its giving error "The Entered Value Is Not on the List of Valid Values." Please let me know your valuable input on this.
Thanks and Regards,
Praveen.Hi Shaira,
I have removed all values from table and left only row key and Parent key then also I am getting the same issue. Could you please let me know what kind of data mismatch can be. Please let me know some example, if you have faced this issue.
Thanks and Regards,
Praveen.
Edited by: Praveen Kumar on May 19, 2011 7:17 AM -
Problem when upgrading to 2004s - Table Tree
Hello everyone,
I'm having a problem with a project that i made in 2004 and now i need to migrate to 2004s.
In a view, i have a table with tree using a master column. When i choose o child to process, i do something like this:
IPrivateTestView.INodeElement select;
select = wdContext.currentNodeElement();
IPrivateTestView.INodeElement elem;
elem = select.currentChildNodeElement();
But in some cases, with 2004s, i get this error:
com.sap.tc.webdynpro.services.exceptions.WDRuntimeException: DataSource attribute of table not valid. [Table Table in view class com.sap.tc.webdynpro.progmodel.generation.DelegatingView]
Anyone can help, or had this same problem ?
Thank you,
NunoHi Dzmitry Laptsionak ,
Need your help in Webdynpro Java Using Tree UI.
We need to capture the currently selected node of the tree. We tried using Leadselection as we do in Tables UI but in Tree UI its not giving the currently opened node. We tried using getTreeSelection() method but it returns nothing. Do we need to do some properties setting to use getTreeSelection() method?
Appreciate your response.
Kind Regards,
Nirmal -
Missing tables in the Table tree
I installed SQL developer version 1.5.0.52 and I noticed that some of the tables that should be showed in the tree were missing. Although I can see these tables writing a command :
Select * from user_tables where table_name like 'AQUA%'
Also, I can use these tables in queries and the 'Find DB Object' find them but these tables are not showed in the tree. The owner has more then 600 tables and I didn't notice a problem like this in previous versions of SQL Developer.
Has somebody any idea about?
Thank youI am also experiencing the same issue, although no tables / views / indexes / triggers are displayed in the object tree for any of my connections.
I am using verison 1.2.1. Will downloading version 1.5.0.52 fix this issue? Thank You -
Table Record Navigation - Struts
I have a button called "List" when I click that button it activates an Struts Action, which returns me a ArrayList of JavaBeans (User Records)
When I use this list directly in my tableData everything works fine. Now I wanted to include record Navigation.
Here is my event Hanlder
public static EventResult doGotoEvent(BajaContext bc, Page page,
PageEvent event)
// if this is a "goto" event, then we need to get the "value" parameter to
// figure out what our start index is. If this is not a "goto" event, then
// we want to start at index "1"
System.out.println("Testing from UIX Provider");
String valueParam = ((event!=null) &&
UIConstants.GOTO_EVENT.equals(event.getName()))
? event.getParameter(UIConstants.VALUE_PARAM)
: "1";
// the "value" parameter starts at "1"; however, our data is zero based,
// so adjust the offset
int value = Integer.parseInt(valueParam)-1;
//getting the List of Users(ArrayList) from session
List userList = (ArrayList)bc.getServletRequest().getSession().getAttribute(IConstants.USER_LIST_SUCCESS);
Vector myVec = new Vector(userList);
ListDataObjectList LDOL = new ListDataObjectList(myVec);
DataObjectList tableData = new PagedDataObjectList(LDOL,
_BLOCK_SIZE.intValue(),
value); //start index
// in a more efficient implementation, we would not use DictionaryData;
// instead, we would implement our own DataObject
DictionaryData data = new DictionaryData();
// we need to add one here, since our data is zero based, but the table
// start index must start at 1
data.put("value", new Integer(value+1));
data.put("size", _BLOCK_SIZE);
data.put("maxValue", new Integer(LDOL.getLength()));
data.put("current", tableData);
EventResult result = new EventResult(page);
result.setProperty("tableData", data);
return result;
}My Table declaration looks like this
<table name="userListTable"
data:tableData="current@tableData@ctrl:eventResult"
width="300" nameTransformed="false"
data:blockSize="size@tableData@ctrl:eventResult"
data:maxValue="maxValue@tableData@ctrl:eventResult"
data:value="value@tableData@ctrl:eventResult"
minValue="1">Event registration for Goto Looks like
<event name="goto">
<method class="UIXProvider" method="doGotoEvent"/>
</event>However the event is not getting fired when I click the "List" button. I am sure the Struts action is returning the list but the goto event is not being triggered the first so that the tableData is set into the event results?
Any work around for this issue?Just little more Information that I am using UIX 2.1.7 and not 2.2.
When I click the List Button I am calling a struts action which sets an ArrayList to session.
In my UIX page how can get it to work for Record Navigation, becuase the Struts action is going to call "success" action forward and the event "goto" will not be fired the first time and the tableData is not set in the eventResult. How can I over comes.
Please help me... -
Dear Friends,
I have a requirement to display an output using Tree; as I am very new to WDA I am trapped in the middle of my design. Can anyone provide me an insight of how to achieve the requirement below,
I have table org_data with following columns
Org_unit org_desc goal_key
I have another table goals with following columns
Goal_key Goal_Desc
I wanted a tree to be displayed as follows,
Org_Unit1 (Org_Unit Desc)
--Goal1 (Goal_Desc)
--Goal2
--Goal3
Org_Unit2
--Goal2
I thought of using the Table (Table master column) and the Tablebykeycolumn.
In this case, how should define my context and what values should I pass for the Parentkey, rowkey etc. Any other thoughts for achieving it is also appreciated.
Thanks,
KanthimathuI referred to the following post in the Wiki page,
https://www.sdn.sap.com/irj/sdn/wiki?path=/display/profile/2007/09/11/integrationofTreeStructureinaTableusingWebdynpro+Abap&
it solved my problem. -
Hello,
I've been playing with trees in WDA and i've come across some problems.
I must be able to display a tree based on a recursive node. So I use a table with a mastercolumn of type TreeByNestingTableColumn.
all good all happy.
But I also want to be able to filter the darn thing.
So I implement the OnFilter action of the table in which I dispatch to the table method handler, create the filtering node and set the filtering values.
In any normal plain table this works like a charm. I believe it even works in a TreeByKeyTableColumn case [update: it doesn't! Same problem there], but in my particular case with the recursive node, the filtering dumps on an assertion.
What happens is, that during the filtering, the fixed_row_count (actually at that point it's called row_count) is set to the amount of filtered lines.
Later on, during rendering a check is done that the fixed_row_count must be set to -1 (sap standard) because apparently a tree isn't allowed to have fixed rows. the whole thing dumps at that point (assert something = -1)
Is this intended behaviour from SAP standard, or am I missing a step?
Maybe I need to call an extra method or something...?
and on a sidenote, is there a standard function or method that I can use to export the table contents to excel?
Thanks in advance,
Tom
Edited by: Tom Van Doorslaer on Sep 1, 2008 5:43 PMDump extract:
What happened?
In the running application program, the ASSERT statement recognize
situation that should not have occurred.
The runtime error was triggered for one of these reasons:
- For the checkpoint group specified with the ASSERT statement, th
activation mode is set to "abort".
- Via a system variant, the activation mode is globally set to "ab
for checkpoint groups in this system.
- The activation mode is set to "abort" on program level.
- The ASSERT statement is not assigned to any checkpoint group.
Error analysis
The following checkpoint group was used: "No checkpoint group specified
If in the ASSERT statement the addition FIELDS was used, you can find
the content of the first 8 specified fields in the following overview:
" (not used) "
" (not used) "
code extract:
60
61 when cl_wd_tree_by_nst_table_col=>cid_tree_by_nst_table_col.
62 nst_table_col ?= m_wd_row_arrangement.
63
64 " TableTreeByNesting does not accept a fixed row count
> assert m_fixed_row_count = c_no_fixed_row_count.
66
67 concatenate m_data_source_path_name '.' into match_path.
68 len = strlen( match_path ).
Active Calls/Events
No. Ty. Program Include Line
Name
19 METHOD CL_WDR_TABLE_DATA_PROVIDER====CP CL_WDR_TABLE_DATA_PROVIDER====CM001 6
CL_WDR_TABLE_DATA_PROVIDER=>GET_TABLE_DATA
18 METHOD CL_WDR_TABLE_DATA_PROVIDER====CP CL_WDR_TABLE_DATA_PROVIDER====CM008 1
CL_WDR_TABLE_DATA_PROVIDER=>GET_VISIBLE_TABLE_DATA
17 METHOD /1WDA/L3STANDARD==============CP /1WDA/L3STANDARD==============CCIMP 89
CL_TABLE=>IF_WDR_VIEW_ELEMENT_ADAPTER~SET_CONTENT
16 METHOD /1WDA/L8STANDARD==============CP /1WDA/L8STANDARD==============CCIMP 34
CL_FLOW_LAYOUT_ITEM=>IF_WDR_VIEW_ELEMENT_ADAPTER~SET_CONTENT
15 METHOD /1WDA/L8STANDARD==============CP /1WDA/L8STANDARD==============CCIMP 16
CL_FLOW_LAYOUT=>IF_WDR_VIEW_ELEMENT_ADAPTER~SET_CONTENT
14 METHOD /1WDA/L7STANDARD==============CP /1WDA/L7STANDARD==============CCIMP 58
CL_TRANSPARENT_CONTAINER=>IF_WDR_VIEW_ELEMENT_ADAPTER~SET_CONTENT
13 METHOD CL_WDR_INTERNAL_WINDOW_ADAPTERCP CL_WDR_INTERNAL_WINDOW_ADAPTERCM007 6
CL_WDR_INTERNAL_WINDOW_ADAPTER=>CONV_VIEW_INTO_VE_ADAPTER_TREE
ME->M_FIXED_ROW_COUNT
1
0000
0001
ME->C_NO_FIXED_ROW_COUNT
-1
FFFF
FFFF
Edited by: Tom Van Doorslaer on Sep 2, 2008 8:34 AM
Edited by: Tom Van Doorslaer on Sep 2, 2008 8:35 AM -
How to get the table/tree/list cell underneath the mouse
I feel like I must be missing something. How can I find out the tree cell underneath the mouse cursor?
I am implementing drag and drop from a table to a tree. I need to know which tree cell the user dropped the item on. I can get the drop coordinates (in pixels, I assume) from the drag event, but there doesn't seem to be a way to convert that into the particular cell index. This same question applies to getting the list and table cell under at particular coordinates.
If there isn't an API for this, has anyone found a reliable workaround (dividing Y by cell height, etc.)
Thanks,
JoshYou need to put event handlers for the D&D events on the Cells that are being created (so you will need to set a custom cell factory). For example, every cell is a Node, and these support properties like 'onDragDroppedProperty', and 'onDragExitedProperty'.
When you add event handlers to these, you should be notified of items being dragged onto specific Cells of the Tree. A Cell then can be matched with a particular item in the Tree by reading its TreeItem property.
Also read the documentation for TreeItem. There is a bit there that says:
"It is important to note however that a TreeItem is not a Node, which means that only the event types defined in TreeItem will be delivered. To listen to general events (for example mouse interactions), it is necessary to add the necessary listeners to the cells contained within the TreeView (by providing a cell factory)."
Which gives a clear hint at the end that for other interactions, you should add listeners to the Cells.
Good luck!
Maybe you are looking for
-
I recently formatted my hard drive so that I could give my computer to my brother but when I was trying to reinstall OS X Lion (10.7) the only option that showed up was to reinstall OS X mountain lion which I do not have, so now I can't get past the
-
PeopleTools 8.53 , 9.2 Install - Missing or invalid version of SQL library
Hello All I am installing 9.2 / 8.53 on a Windows 7 Professional (64 Bit) Machine I have installed Oracle 11g 32 bit (Server and Client) edition that has the following paths: C:\oracle\product\11.2.0\dbhome_1 and C:\oracle\product\11.2.0\client_1 I c
-
Ipod is "supposedly" synced with another library
All of a sudden when I plug in my ipod, itunes tells me I am synced with another library...I'm not, I'm synced with this library and have been using this library fine. Any ideas??
-
Hello Crystal Designers, Need some guidance on creating a line graph showing a trend. The X-axis needs to show weekly increments that start on Mondays. The Y-axis will be a count of fields that fall into a weekly increment. There will be 3 differe
-
Capturing Idocs created by BAPI Created Documents
Hi guys, I have a big problem that i could really need some help, i use a BAPI: BAPI_ACC_DOCUMENT_POST to create documents, in same cases depending on the accounts used there are some CO documents created and their equivalent idocs. I searched everyw