I think I found the solution to my problem. I've posted it just incase anyone else is facing similar problems doing dynamic matching in JSTL:
<html:form action="iterate.do" method="POST">
<html:select onchange="document.forms[0].submit();" name="selectOne">
<c:forEach items="${iterateActionForm.listIterator}" var="list">
<option value='<c:out value="${list.value}"></c:out>'> <c:out value="${list.label}"></c:out></option>
</c:forEach>
</c:set>
</select>
<select name="selectTwo">
<c:forEach items="${iterateActionForm.complexIterator}" var="keys">
<c:choose>
<c:when test="${keys.key == iterateActionForm.selectOne}">
<c:forEach items="${keys.value}" var="bean">
<option value="<c:out value='${bean.value}'/>">
<c:out value="${bean.label}"></c:out>
</option>
</c:forEach>
</c:when>
</c:choose>
</c:forEach>
</select>
The key here is the
test clause is using a value set by the previous select html tag.
Lee