struts2标签









/s:if







/s:iterator

session中存储Map集合:roleList,Action中存储user对象,其属性有role

现在要实现 user.role.roleId等于集合遍历的Rold就让该角色处于选中状态

上面的实现代码中,没有进if判断语句,直接执行else语句。
求解,请指点!实在是没有积分,请帮忙。

不了解你的Map中的结构,试试这样吧:
[code="xml"]

            <s:if test="user.role.roleId == value.RoleId">
                <option value="<s:property value='value.RoleId'/>" selected="selected">
                    <s:property value="value.RoleName" />
                </option>
            </s:if>
            <s:else>
                <option value="<s:property value='value.RoleId'/>">
                    <s:property value="value.RoleName" />
                </option>
            </s:else>
        </s:iterator>
    </select>[/code]

[b]给你个我的例子:
[/b]
[code="xml"]



/s:if
/s:iterator[/code]

[b]session 中的roleList:[/b]
[code="java"]Map roleList = new HashMap();
roleList.put("admin",1);
roleList.put("normal",2);
roleList.put("guest",3);

    ActionContext.getContext().getSession().put("roleList", roleList);[/code]

[b]Action中的user:[/b]
[code="java"]user.setAge(13);
user.setName("xiaolongfeixiang");
user.setRoleid(2);[/code]
[b]
输出结果:[/b]
[quote]normal 2 [/quote]

[b][quote]这样可以实现,不了解这#号的作用,谢谢 [/quote]

#是OGNL的标识符:

#session.roleList --> 取得session中的 roleList

如果不写#号的话,值是在OGNL context的root stack中寻找的。

[color=blue]
PS: Struts2的OGNL context(详细的参考Struts2文档)

1、requet Stack (存放request范围的参数)

2、session Stack(存放session范围的参数)

3、application Stack(存放application范围的参数)

4、root Stack(存放Action 等范围的参数)

5、自定应的stack[/color]
[/b]