I managed to have it working, sources are below. By the way, I do not
understand why the selected values in the combos are not submited (I have to
use some input hidden in the form...) any tip?
Hope it helps.

@Musachy : thanks for the link but I have problems to use most of the 2.1
examples.
@Dave : i'm struts 2 noob and still don't figure out clearly how to adapt a
pure dojo example to struts-dojo.

struts.xml
==============
<action name="handleSelectActionAjax"
class="org.rca.conticabase.web.action.MultiSelectAction"
method="handleSelect">
        <result>/WEB-INF/components/multiSelect.jsp</result>
</action>
<action name="submitSelectAction"
class="org.rca.conticabase.web.action.MultiSelectAction"
method="handleSubmit">
        <result>/WEB-INF/pages/ajaxPage.jsp</result>
</action>
==============

MultiSelectAction.java
==============
public class MultiSelectAction extends ActionSupport {

        private static final long serialVersionUID = -4617365382177316987L;

        private String firstSelectValue;
        private String secondSelectValue;
        private String thirdSelectValue;

        private List<String> secondList;
        private List<String> thirdList;

        private String message;
        
        public String getFirstSelectValue() {
                return firstSelectValue;
        }

        public void setFirstSelectValue(String s) {
                this.firstSelectValue = s;
        }

        public List<String> getSecondList() {
                return secondList;
        }

        public void setSecondList(List<String> l) {
                this.secondList = l;
        }

        public String getSecondSelectValue() {
                return secondSelectValue;
        }

        public void setSecondSelectValue(String s) {
                this.secondSelectValue = s;
        }

        public List<String> getThirdList() {
                return thirdList;
        }

        public void setThirdList(List<String> l) {
                this.thirdList = l;
        }

        public String getThirdSelectValue() {
                return thirdSelectValue;
        }

        public void setThirdSelectValue(String s) {
                this.thirdSelectValue = s;
        }
        
        public String getMessage() {
                return message;
        }

        public void setMessage(String message) {
                this.message = message;
        }

        public String handleSelect() throws Exception{
                if 
(ServletActionContext.getServletContext().getAttribute("firstList") ==
null){
                        ArrayList<String> firstList = new ArrayList<String>();
                        firstList.add("1");
                        firstList.add("2");
                        firstList.add("3");
                        
ServletActionContext.getServletContext().setAttribute("firstList",
firstList);
                }
                if (getFirstSelectValue() != null && 
!getFirstSelectValue().equals("")) {
                        secondList = new ArrayList<String>();
                        secondList.add(getFirstSelectValue() + "-1");
                        secondList.add(getFirstSelectValue() + "-2");
                }
                if (getSecondSelectValue() != null && 
!getSecondSelectValue().equals(""))
{
                        thirdList = new ArrayList<String>();
                        thirdList.add(getSecondSelectValue() + "-1");
                        thirdList.add(getSecondSelectValue() + "-2");
                }
                return SUCCESS;         
        }
        
        public String handleSubmit() throws Exception{
                message = "your choice: '" + firstSelectValue + "'"
                + ", '" + secondSelectValue + "'"
                + ", '" + thirdSelectValue + "'";
                return SUCCESS;         
        }
}
==============

multiSelect.jsp
==============
<%@ include file="/common/taglibs.jsp"%>

<s:if test="%{#application.firstList != null}">
        <s:select label="Level 1" id="firstSelect" 
list="%{#application.firstList}" 
                emptyOption="true" cssStyle="width: 100px;"
                onchange="handleSelect(this);" value="firstSelectValue"/>
</s:if>
<s:if test="secondList != null">
        <s:select label="Level 2" id="secondSelect" list="secondList" 
                emptyOption="true"  cssStyle="width: 100px;"
                onchange="handleSelect(this);" value="secondSelectValue"/>
</s:if>
<s:if test="thirdList != null">
        <s:select label="Level 3" id="thirdSelect" list="thirdList" 
                emptyOption=" true" cssStyle="width: 100px;"
                value="thirdSelectValue"/>
</s:if>
==============

ajaxPage.jsp
==============
<%@ include file="/common/taglibs.jsp" %>

<head>
<s:head theme="ajax"/>
</head>

<h3>page: <%= new java.util.Date() %></h3>      
        
<s:include value="/WEB-INF/components/ajaxDiv.jsp" />

<br/>
<div class="separator"></div>
<br/>

<script>
function handleSelect(select) {
        document.multiSelectForm.firstSelectValue.value =
document.multiSelectForm.firstSelect.value;
        if (select.id == 'firstSelect'){
                document.multiSelectForm.secondSelectValue.value = null;
                document.multiSelectForm.thirdSelectValue.value = null;
                try{
                        document.multiSelectForm.secondSelect.value = null;
                        document.multiSelectForm.thirdSelect.value = null;
                }
                catch(err){}
        } 
        else{
                document.multiSelectForm.secondSelectValue.value =
document.multiSelectForm.secondSelect.value;
        }
        dojo.event.topic.publish('handleSelectTopic');
}

function handleSubmit() {
        try{
                document.multiSelectForm.firstSelectValue.value =
document.multiSelectForm.firstSelect.value;
                document.multiSelectForm.secondSelectValue.value =
document.multiSelectForm.secondSelect.value;
                document.multiSelectForm.thirdSelectValue.value =
document.multiSelectForm.thirdSelect.value;
        }
        catch(err){ 
                // second or third list not present 
        }
}
</script>

<s:form id="multiSelectForm" name="multiSelectForm" theme="simple"
onsubmit="handleSubmit();">
        <s:hidden name="firstSelectValue" />
        <s:hidden name="secondSelectValue" />
        <s:hidden name="thirdSelectValue" />
        <s:url id="handleSelectUrl" action="handleSelectActionAjax" /> 
        <s:div id="multiSelectDiv" href="%{handleSelectUrl}" theme="ajax"
                listenTopics="handleSelectTopic" formId="multiSelectForm"
showLoadingText="false">
        </s:div>
        <br/>
        <s:submit value="Submit" action="submitSelectAction"/>
        <br/>
        submited selection : ${message != null ? message : ''}
</s:form>


-- 
View this message in context: 
http://www.nabble.com/dependant-%3Cs%3Aselect%3E-updated-with-ajax-%3A-how--tp15616529p15708830.html
Sent from the Struts - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to