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

  • Material for Table Tree

    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 MATT

    Hi,
    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, Daniel

    Daniel,
    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
    Depesh

    https://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,
                 Nuno

    Hi 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 you

    I 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...

  • Table - tree

    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,
    Kanthimathu

    I 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.

  • Filter table tree

    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 PM

    Dump 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,
    Josh

    You 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