Dynamic Table driven menu

I am trying to to create a menu whose menu item has to be dynamically pulled out from a database table. Right now I am saving all the menu item in a xml file. My code looks like this
<tr><td class="head" colspan="2" align="center"><br/>Country of Origin</td></tr>
   <tr class="input">
      <td colspan="2"  align="center" class="input">
           <SELECT id="country" name="country">
             <xsl:for-each select="//country/CodeList/Entry">
<OPTION class="input">  
<xsl:attribute name="value">
<xsl:value-of select="code" />
</xsl:attribute>
<xsl:value-of select="name"/>
</OPTION></xsl:for-each>
            </SELECT>
     </td>
  </tr>Thanks in advance

Hi,
an example is shown here:
http://www.javaworld.com/jw-03-2000/jw-03-xmlsax-p4.html
Menu is in AWT in this article, not in swing but it can't be so different.
L.P.

Similar Messages

  • Dynamic table driven menus

    Using jsf/adf bc I've been studying the 'dynamic' menu setup in the srdemo and have a decent understanding of how that works in a declarative way. However, that example assumes the menu items and their properties will be 'hard coded' into the faces-config. I have menu items and their properties (label, outcome, etc) stored in a table and I want to get rows from this table and essentially create an object of the MenuItem class for each row in the Menu table. I understand how to do this step programmatically. I'm left wondering then how to create the instance of MenuTreeModelAdapter and add each of these MenuItem instances to it and further how to create the instance of MenuModelAdapter and add the instance of MenuTreeModelAdapter to it?? Will this need to be a totally programmatic thing, or am i going to still be using some of the entries in the faces-config.xml? Thanks for any help on this.

    John, thanks for the reply. I did search first and didn't come up with anything. I took a look at the example from the link you gave me. It didn't provide a lot of help, but I think I've got something I can use for my purposes. My application menu will have two levels, a menu and submenu. Therefore, there exists two db tables to hold info for each menu level. The submenu table rows are children of the menu rows and so are related by fk. In my application, I just created master/detail view objects and link to retrieve all menu items along with their submenu items. I then iterate thru the rows programmatically and populate the menu model that way. Initially, it seems to be working. I'll post that code in case it might help someone else:
    public void buildMenuItems(){
    ViewObjectImpl menuVO = getTopLevelMenu();
    //iterate thru menu records
    menuVO.executeQuery();
    Row menuItemRow = null;
    List menuItemsList = new ArrayList();
    List submenuItemsList = new ArrayList();;
    while(menuVO.hasNext()){
    menuItemRow = menuVO.next();
    //convert the menu row into an instance of a MenuItem object.
    MenuItem menuItem = new MenuItem();
    menuItem.setLabel((String)menuItemRow.getAttribute("MenuLabel"));
    menuItem.setOutcome((String)menuItemRow.getAttribute("NavigationOutcome"));
    menuItem.setViewId((String)menuItemRow.getAttribute("ViewId"));
    RowSet sublevelMenuRows = (RowSet)menuItemRow.getAttribute("SublevelMenus");
    while(sublevelMenuRows.hasNext()){
    Row sublevelMenurow = sublevelMenuRows.next();
    MenuItem sublevelMenuItem = new MenuItem();
    sublevelMenuItem.setLabel((String)sublevelMenurow.getAttribute("SubmenuLabel"));
    sublevelMenuItem.setOutcome((String)sublevelMenurow.getAttribute("NavigationOutcome"));
    sublevelMenuItem.setViewId((String)sublevelMenurow.getAttribute("ViewId"));
    submenuItemsList.add(sublevelMenuItem);
    //if there were any sublevel menu items (children), add them to that menu item instance.
    if(submenuItemsList.size() > 0){
    //i'm basically making a copy of the submenu item list here so i can pass that to the setChildren method
    //of the MenuItem object. Then i'm safe to clear() the original list so it can be used again. Without using
    //a copy of the list to pass in, a subsequent call to clear() on that same list actually removes the children
    //that were just placed into MenuItem from that object.
    List submenuItemsListCopy = new ArrayList(submenuItemsList);
    menuItem.setChildren(submenuItemsListCopy);
    submenuItemsList.clear();
    //add the MenuItem instance to a list.
    menuItemsList.add(menuItem);
    MenuTreeModelAdapter treeModelAdapter = new MenuTreeModelAdapter();
    treeModelAdapter.setListInstance(menuItemsList);
    treeModelAdapter.setChildProperty("children");
    MenuModelAdapter modelAdapter = new MenuModelAdapter();
    modelAdapter.setViewIdProperty("viewId");
    try{
    modelAdapter.setInstance(treeModelAdapter.getModel());
    }catch(IntrospectionException ex){
    //do nothing here...
    FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("menuModel", modelAdapter);
    }

  • --urgent Can I use table data to create a dynamic drop down menu?

    Hi,
    I am asked to investigate the possibility of using APEX to create a table driven dynamic drop down menu? The deadline is tomorrow but I have spent quite a bit of time but still have not any clue. Can any one have such experience to point me a way to focus on?
    Many thanks.
    Jennifer

    Thanks you very much for the help Kevin.
    Currently my company is using htp.p style to create web app and using the dynamic menu in a similar way as you explained. Now they want to move to Apex and still keep dynamic menu functionality. After reading your response and research I have done I think I can embed it into Apex application by creating the similar table and PL/SQL package and let Apex to call the PL/SQL package when the application is first called. However may I ask you a question about how to call such pl/sql procedure in Apex? .
    The current application has the following URL, from which the procedure pkg_main.print_menu is called and html home page with dynamic menu is displayed.
    Http://app server:1234/pls/applicationname/pkg_main.print_menu?p_new_window=N
    BUT what about the Apex? The Apex URL format is like the following, where 11563 and 1 is application id and page number. Assume that 1 is home page, but HOW the procedure is called, from WHERE?
    http://apex.oracle.com/pls/apex/f?p=11563:1:3397731373043366363
    Jennifer

  • Dynamic tables with data driven visibility of columns (XML).

    Hi
    I am trying to make a template in LiveCycle Designer (XDP) with a dynamic table, and with dynamic visibility of columns.
    I want the column visibility to be driven by the xml input.
    (There is no user input.)
    I want the columns to visible in the table only if one or more of the rows has a data cell with value in a spesific column. If not the entire column should dissappear from the generated pdf.
    If that is not possible, my alternative is so set a value in th XML file to hide a tables column. But how?
    I have no problems of making dynamic tables, that is solved.
    I only want to hide unused columns in a table, defined in the xml source file.
    Can anyone help?
    Borge

    Hi,
    The link is not working..
    Please provide a valid link.

  • Created a one page index.php site with dynamic driven menu but have to click thrice before it popula

    Created a one page index.php site with dynamic driven menu but have to click thrice before it populates the content menu
    it has no problem getting the menu information but seems to forget that the content needs to load on first go ie for the Home page
    anyone with any help would be great

    Hey J.S,
    Do you think its a bad idea to have Database admin over them web? How could i make my db admin into a program to run on a certain computer. i.e on the car breaker yard where there is no dreamweaver.
    Thanks J.S

  • 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

  • How do i create a styled spry mysql driven menu using dreamweaver cs4?

    How do i create a styled spry mysql driven menu using dreamweaver cs4?
    I have cs4. I gave up on using MS sql as a datasource. I finally got a php successfull connection in my PHP web page.
    I would like a nice video tutorial for creating a dynamic menu.
    I guess i can style it by attaching a css file to the page. Are their any already designed css files out there in some online area?
    i am not a good designer. so i would like to simply have a collection of menu_style.css files and choose what looks good.
    But first i need to build the spry menu from the mysql database.
    Any help is apprechiated.
    My first choice was to maintain the data in an MS sql server file. If i could directly attach to an ms sql datasource then that would be the best option.
    I dont think i want to have to re-generate an XML datasource each time i add or modify the menu. I would like to maintain the MS Sql or mySql file instead.
    If i could generate an XML datasource from the MS Sql database then I may even prefere that, but i have spent a lot of time trying to figure out how to do that and not had any success. So i prefere working in MS sql but would settle for mySql if i had to.
    Thanks
    Jerry

    To create a dynamic menu take a look here http://labs.adobe.com/technologies/spry/samples/menubar/MenuFromNestedData.html#
    The XML file for the above menu looks like this
    <?xml version="1.0" encoding="utf-8"?>
    <items>
         <item id="0001" type="donut">
              <name>Cake</name>
              <ppu>0.55</ppu>
              <batters>
                   <batter id="1001">Regular</batter>
                   <batter id="1002">Chocolate</batter>
                   <batter id="1003">Blueberry</batter>
                   <batter id="1003">Devil's Food</batter>
              </batters>
              <topping id="5001">None</topping>
              <topping id="5002">Glazed</topping>
              <topping id="5005">Sugar</topping>
              <topping id="5007">Powdered Sugar</topping>
              <topping id="5006">Chocolate with Sprinkles</topping>
              <topping id="5003">Chocolate</topping>
              <topping id="5004">Maple</topping>
         </item>
         <item id="0002" type="donut">
              <name>Raised</name>
              <ppu>0.55</ppu>
              <batters>
                   <batter id="1001">Regular</batter>
              </batters>
              <topping id="5001">None</topping>
              <topping id="5002">Glazed</topping>
              <topping id="5005">Sugar</topping>
              <topping id="5003">Chocolate</topping>
              <topping id="5004">Maple</topping>
         </item>
         <item id="0003" type="donut">
              <name>Buttermilk</name>
              <ppu>0.55</ppu>
              <batters>
                   <batter id="1001">Regular</batter>
                   <batter id="1002">Chocolate</batter>
              </batters>
         </item>
         <item id="0004" type="bar">
              <name>Bar</name>
              <ppu>0.75</ppu>
              <batters>
                   <batter id="1001">Regular</batter>
              </batters>
              <topping id="5003">Chocolate</topping>
              <topping id="5004">Maple</topping>
              <fillings>
                   <filling id="7001">
                        <name>None</name>
                        <addcost>0</addcost>
                   </filling>
                   <filling id="7002">
                        <name>Custard</name>
                        <addcost>0.25</addcost>
                   </filling>
                   <filling id="7003">
                        <name>Whipped Cream</name>
                        <addcost>0.25</addcost>
                   </filling>
              </fillings>
         </item>
         <item id="0005" type="twist">
              <name>Twist</name>
              <ppu>0.65</ppu>
              <batters>
                   <batter id="1001">Regular</batter>
              </batters>
              <topping id="5002">Glazed</topping>
              <topping id="5005">Sugar</topping>
         </item>
         <item id="0006" type="filled">
              <name>Filled</name>
              <ppu>0.75</ppu>
              <batters>
                   <batter id="1001">Regular</batter>
              </batters>
              <topping id="5002">Glazed</topping>
              <topping id="5007">Powdered Sugar</topping>
              <topping id="5003">Chocolate</topping>
              <topping id="5004">Maple</topping>
              <fillings>
                   <filling id="7002">
                        <name>Custard</name>
                        <addcost>0</addcost>
                   </filling>
                   <filling id="7003">
                        <name>Whipped Cream</name>
                        <addcost>0</addcost>
                   </filling>
                   <filling id="7004">
                        <name>Strawberry Jelly</name>
                        <addcost>0</addcost>
                   </filling>
                   <filling id="7005">
                        <name>Rasberry Jelly</name>
                        <addcost>0</addcost>
                   </filling>
              </fillings>
         </item>
    </items>
    Then remains the manner in which you create the XML file which can be found here http://labs.adobe.com/technologies/spry/samples/utils/query2xml.html
    One you have your menu up and running, you will be able to apply styles and effects

  • How to populate a dynamic table according to the choice of the viewer

    Hi there,
    I ran into a dead-end on my  "Events" page.
    There is a dynamic table getting the info from a database. It will initially show the Upcoming Events.
    At this point my question is this:
    *Can I populate the dynamic table based on a condition where the current date and the event date (as in the db) will be compared and if the event date is later than the current date, it will be displayed in the table. Otherwise, it won't.
    If I can do that, can someone please help me out with the code?
    Besides that, on the right side of the page there are 3 options for the viewer:
    1. View upcoming events
    2. View past events
    3. Search events by month and year
    What I want to do is that when the viewer clicks on 'past events', the table will be reset and populated with those events whose date has passed.
    When the viewer clicks on "upcoming events", the table is reset again and populated with the relevant events.
    When the viewer selects a month and a year, search the database to find the relevant records.
    Can all of this be written in php? Since I read smwhere that php doesn't work with onclick functions... i got confused. Cuz the data in my table will have to vary depending on what the viewer is clicking (upcoming events/past events/search events). I do not wish to create separate pages for each type of event.
    If anybody has a better suggestion to carry out this task, please share!
    Thanks!

    >Can I populate the dynamic table based on a condition where the current date and the event date (as in the db)
    >will be compared and if the event date is later than the current date, it will be displayed in the table. Otherwise, it won't.
    Of course. You just need to compare the date field in your database with the current date as returned by your DBMS date function. Assuming you are using MySQL, you would compare your column with the currdate() function and use the appropriate greater than/ less than operators in the SQL WHERE clause. If you don't know what a WHERE clause is then I would urge you to learn SQL as soon as possible. You can't build data driven sites without a basic understanding of SQL.
    >Since I read smwhere that php doesn't work with onclick functions..
    What this means is that php is a server side language, where user interactions always occur at the client site. But that does not mean you can't invoke a server side action from a client side event. You most certainly can and would.
    You might consider adding links to the dynamic table page that pass a querystring to the php script which determine what filter to add in the WHERE clause- greater than the current date, less than, etc.
    Also, in the future, please post these questions to the application development forum.

  • Tab Order of Dynamic Table or subform

    Hi,
    I have a page with few subforms. At this subforms are dynamic tables or dynamic subforms. How does the tab order works in this kind of layout.
    Some time I have a few subforms or tables group together when activiate the tab order form the menu [View->Tab order]. I have the tab order arranged for a dynamic subform. When I preview and add a few instance of the subform (call it subform A), the first instance tab order follow what was set. But when tab to second instance of subform (subform A), the cursor just when to another subform (subform B). Why is that so? Shouldn't it just continue to the second instance?
    Thanks for any help.

    Hi Mike,
    I have faced with the same problem also. So as a temporary solution, in the exit event of the last item in the table, I changed the focus to the next instance's first item. Not a good way. If there is any different solution, waiting also.
    Asiye.

  • Dynamic table column editing

    Hi,
    I made a VO with quite complex query (nested subqueries linked with inner join) and when I dragged it from Data Control to the page I didn't get the familiar context menu with implementation options I used to get it earlier.
    Instead of, I got an implemented table with following structure:
    - af:table - t3
    - af:forEach
    - af:column - #{...}
    - af:outputText - #{...}
    Did I get a dynamic table?
    My problem is that I cannot get the list of attributes from VO query and then to edit table columns.
    They are shown in table at runtime but with default properties. I can set up af:column options generally but I need to set up all of the attributes individually.
    Is this a query-level problem or there is another way doing this?
    Regards,
    Aleksandar Čkrebo

    Hi,
    I made a VO with quite complex query (nested subqueries linked with inner join) and when I dragged it from Data Control to the page I didn't get the familiar context menu with implementation options I used to get it earlier.
    Instead of, I got an implemented table with following structure:
    - af:table - t3
    - af:forEach
    - af:column - #{...}
    - af:outputText - #{...}
    Did I get a dynamic table?
    My problem is that I cannot get the list of attributes from VO query and then to edit table columns.
    They are shown in table at runtime but with default properties. I can set up af:column options generally but I need to set up all of the attributes individually.
    Is this a query-level problem or there is another way doing this?
    Regards,
    Aleksandar Čkrebo

  • Page breaks with dynamic table

    Hi there!
    We've built a LiveCycle process in which we get data from an XML file and generate the PDF in LC Output.
    However, although the items are being correctly generated in the table, only the first 20 or so records are being included, generatin just one page.
    There are around 200 records in the XML - we just can't find how to set up the XDP in LC Designer so that we get a multipages PDF containing all 200 records instead of just 20.
    We are using a dynamic table with the following set up:
    Pagination: Following Previous
    In Binding tab, we checked Repeat Row for Each Data Item
    This table was inserted using the Insert Table option in main menu, using the wizard and it's inserted in a subform.
    All these setup options were applied to the table row element.
    Any ideas?
    Thank you!
    Marcos

    Hi Niall,
    Thank you for the input!
    However, there's something else we're missing here.
    After I tried your suggestion there were actually page breaks... we got 4 pages. However, only one of them had any content (the dynamic table with 30 records) and the other three were blank. The XML that populates the table includes 200 records.
    We're pulling our hair off here, trying to do this for days!...
    BR,
    Marcos

  • Alignment in dynamic table in workflow mail

    I have a workflow with a task of sending mail to SAP inbox. The body of the mail should display a table with a structure that is dynamically determined at run time. The workflow is triggered from a report in which a dynamic table is first created, filled with data. Then, before the event is raised, each line of the table is converted to ABAPTXT255 and then the table of string is passed to the workflow. The content of the original table is then shown as a table of strings.
    The problem is that, because I convert the content to string before passing the table to workflow, I’ve lost control over the alignment of columns I originally had before the conversion, and the font used in SAP inbox doesn’t help either. Hence, the table appears in the mail as having no alignment at all.
    My dilemma is that, I cannot think of another way of passing a table with dynamic structure to workflow, except to convert everything to string first. But, then I lost control over the alignment.
    Has anyone come across anything similar to this before? Any comments or suggestions?
    Thanks in advance.

    Can u send the code how u r doing this?
    Also let me know that when u see the contents in the inbox, from menu path Settings-> text in non-proportional font.
    Are your contents aligned when u do the above setting?
    Regds
    Samant

  • Dynamic Drop-Down Menu Solution

    Hi All,
    After spending a lot of time trying to find a good solution for a dynamic drop-down menu, I end up writing my own.
    The solution is for a list of items, having ITEM as the primary key of the table and ITEMDESCRIPTION as the list of options for the user to select.
    The steps are:
    1) JavaBean to return a ResultSet;
    2) A custom tag to build a HTML SELECT;
    3) A .tld file to declare the custom tag;
    4) web.xml where the custom tag mapping resides;
    4) A JSP to illustrate how to call the custom tag;
    Hoping this will save lots of time to others
    Cheers
    Trajano Roberto
    1) Custom tag
    package com.amstras.maintenance.customtags;
    * Title: erp
    * Description:
    * Copyright: Copyright (c) 2001
    * Company: amstras
    * @author Trajano Roberto
    * @version 1.0
    import javax.servlet.jsp.tagext.*;
    import javax.servlet.jsp.*;
    import java.sql.*;
    import com.amstras.maintenance.javabeans.*;
    public class listitemmaster extends TagSupport {
    private itemmaster itemmaster = new itemmaster();
    private ResultSet rs = null;
    private String parametername = null;
    public int doStartTag() throws JspException {
    try {
    itemmaster.connect();
    rs = itemmaster.listitemmaster();
    pageContext.getOut().print( "<select name = \"" + parametername + "\">" );
    catch ( Exception e ) {
    throw new JspTagException( e.getMessage() );
    finally {
    return EVAL_BODY_INCLUDE;
    public int doAfterBody() throws JspException {
    try {
    if( rs.next() ) {
    pageContext.getOut().print( "<option value = \"" + rs.getString( "ITEM" ) + "\">" + rs.getString( "ITEM" ) + "&nbsp&nbsp&nbsp" + rs.getString( "ITEMDESCRIPTION" ) + "</option>" );
    return EVAL_BODY_AGAIN;
    else {
    pageContext.getOut().print( "</select>");
    itemmaster.disconnect();
    return SKIP_BODY;
    catch ( Exception e ) {
    throw new JspTagException( e.getMessage() );
    public void setParametername( String sPARAMETERNAME ) {
    parametername = sPARAMETERNAME;
    2) JavaBeam where the method to return the ResultSet resides
    public ResultSet listitemmaster() throws SQLException, Exception {
    if( con != null ) {
    try {
    String sSQL = null;
    sSQL = " SELECT ITEM, ITEMDESCRIPTION FROM ITEMMASTER ORDER BY ITEM ";
    ps = con.prepareStatement( sSQL );
    rs = ps.executeQuery();
    catch( SQLException sqle ) {
    error = "SQLException: list item master failed possible record does not exist. ";
    error += sqle.toString();
    throw new SQLException( error );
    catch( Exception e ) {
    error = "An exception occured while listing item master record. ";
    error += e.toString();
    throw new Exception( error );
    finally {
    return rs;
    else {
    error = "Exception: Connection to database was lost.";
    throw new Exception( error );
    3) extract from the .tld file where the custom tag is declared
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
    "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
    <taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>
    <short-name>itemmaster</short-name>
    <description>item master</description>
    <tag>
    <name>viewitemmaster</name>
    <tag-class>com.amstras.maintenance.customtags.viewitemmaster</tag-class>
    <attribute>
    <name>item</name>
    <required>true</required>
    <rtexprvalue>true</rtexprvalue>
    <description>item</description>
    </attribute>
    </tag>
    <tag>
    <name>listitemmaster</name>
    <tag-class>com.amstras.maintenance.customtags.listitemmaster</tag-class>
    <attribute>
    <name>parametername</name>
    <required>true</required>
    <rtexprvalue>true</rtexprvalue>
    <description>parameter name</description>
    </attribute>
    </tag>
    </taglib>
    4) web.xml mapping for the custom tag
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
    <web-app>
    <servlet>
    <servlet-name>debugjsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
    <param-name>jspCompilerPlugin</param-name>
    <param-value>com.borland.jbuilder.webserverglue.tomcat.jsp.JasperSunJavaCompiler</param-value>
    </init-param>
    </servlet>
    <servlet-mapping>
    <servlet-name>debugjsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
    </servlet-mapping>
    <taglib>
    <taglib-uri>erp/maintenance/itemmaster</taglib-uri>
    <taglib-location>/WEB-INF/itemmaster.tld</taglib-location>
    </taglib>
    </web-app>
    5) JSP call to the custom tag
    <%@ page errorPage="billofmaterialErrorPage.jsp" %>
    <%@ taglib prefix = "im" uri = "erp/maintenance/itemmaster" %>
    <html>
    <head>
    <title>CSI - ERP - add bill of material</title>
    <link rel = "stylesheet" href = "/erp/erpstyle.css">
    </head>
    <body>
    <h1>Add Bill of Material</h1>
    <form action = "billofmaterialcontroller.jsp" method="post">
    <table>
    <tr>
    <td align = "LEFT"><font color = blue>Parent Item:</font></td>
    <td><im:listitemmaster parametername = "parameter1" /></td>
    </tr>
    <tr>
    <td align = "LEFT"><font color = blue>Child Item:</font></td>
    <td><im:listitemmaster parametername = "parameter2" /></td>
    </tr>
    <tr>
    <td align = "LEFT"><font color = green>Qty Per:</font></td>
    <td><input type = "text" name = "parameter3" size = "5" maxlength = "5" /></td>
    </tr>
    </table>
    <p>
    <input type="submit" name="submit" value="Add">
    <input type="reset" value="Reset">
    </p>
    <input type = "hidden" name = "Action" value = "Add">
    </form>
    Click <a href = "billofmaterial.jsp">here</a> to go back.
    </body>
    </html>

    This is a very helpful execellent sample code.
    However, If I'm using Model-View-Control approach, then what's the way of applying these codes
    to each indivisual file? Say, I have 20 files and only 4 of the 20 need to be treated as they like
    to have drop down menu in particular column(s)??? How could the custom tag be applied as the
    controller tells the view to present these special treat? or it is not possible (I have to treat each
    file, filtered by controller -- one by one as it encounters the special need)?
    Thx, Tzae

  • Table driven parllel processing in workflow

    Hi,
        Please tell me what is table driven parllel processing technique in workflow?
    Thanks in advance.
    Thanks& Regards,
    Rao N

    Hi, that's a difficult requirement.
    First advice post this on the workflow forum (=BPM) it's better suited there.
    Next advice:
    Try to make it easier for yourself, I don't think the business will ever be able to ha a 12 step approval case, most of the times it's 1, a lot of times 2 and in some cases 3 (is this correct with the business you're working in ?)
    In that case, you can simply dynamically fill the workflow containers holding the number of levels plus the approvers, based on the number of levels (multiple condition) you either execute subflow 1, 2 or 3.
    OR, you can somehow put all the logic in a loop.
    Kind regards, Rob Dielemans

  • How to add dynamic table in DW CC?

    I am relatively new to DW.  I am trying to set up a searchable database where I can input an area code, and return a table with associated data (say diseases in that area).  I need a dynamic table for this, but DW CC does not have a dynamic object link in the "insert" menu.  Any help?  I am running on a Mac

    Hi Ben,
    Thank you for telling us how to create a dynamic table in Dw CC (It was a breeze in CS6 with the wizard, but why would Adobe keep a tool that makes life easy for developers when they can make life harder instead? - and don't even get me started on the missing spry form evaluation widgets!).
    However, two things are missing from your solution.
    Firstly, if I create a table connected to a database, with each cell in the top row displaying a caption for each column, followed by a second row where I drag the field names from the bindings tab into the appropriate cell beneath each column name, and then set repeat region in the recordset, the table displayed in my browser shows a repeated column caption above each individual record that is displayed, which is far from ideal. There does not seem to be a way to isolate the column records from the column names.
    Secondly, each cell width of each row is displayed according to the width of the cell data, meaning that there is no uniformity to the table (see screenshot below). Ideally, I would like each column to be uniform in width.
    If you or anyone can give me the solution to these knotty problems I would be very grateful.
    Thanks in anticipation.

Maybe you are looking for