select 在 struts2 中下降,从 struts1 迁移到 struts2
select drop down in struts2, migrating from struts1 to struts2
下面是来自 jsp
的 Struts1 代码片段
<logic:notEmpty name="user" property="myLanguages" scope="session">
<html:select name="user" property="defaultLanguage">
<html:optionsCollection label="languageName" name="user" property="myLanguages" value="languageCode"/>
</html:select>
</logic:notEmpty>
下面是来自 jsp 的 Struts2(2.5.16 版本)代码片段,它不起作用
<s:if test="%{#session.user.myLanguages != null && #session.user.myLanguages != ''}">
<s:select list="{#session.user.myLanguages}"
listKey="languageCode" listValue="languageName"
name="user" value="defaultLanguage"/>
</s:if>
下面是来自jsp
的脚本代码
<%
User user = (User) session.getAttribute("user");
Vector vMyLang = user.getMyLanguages();
System.out.println("logon.jsp:vMyLang--- "+vMyLang);
if(null != vMyLang){
System.out.println("logon.jsp:vMyLang----- "+vMyLang.size());//here output(i.e size) is 20
}
%>
会话中存在值,但我无法使用 strut2 标签,
日志中没有 error/exception
Struts1 代码工作正常,Struts2 代码不工作(我的意思是 UI 中没有显示下拉列表)
请帮我指出我做错了什么。
JSP 和 scriptlet 不等同。
在您的 scriptlet 中,您正在 调用 一个名为 myLanguages()
的方法。
在您的 <s:if />
标记中,您正在 尝试 调用名为 getMyLanguages()
.
的方法
因为您没有遵循 JavaBean 命名约定,您不能使用 OGNL 提供的语法糖,您需要实际调用该方法。
注意:您应该遵循 JavaBean 命名约定;他们是有原因的约定。任何依赖反射的Java,比如OGNL,都需要它。
用下面的代码修复
<s:if test="%{#session.user.myLanguages != null}">
<s:select list="%{#session.user.myLanguages}"
listKey="languageCode" listValue="languageName"
value="%{#session.user.defaultOperaLanguage}/>
</s:if>
下面是来自 jsp
的 Struts1 代码片段<logic:notEmpty name="user" property="myLanguages" scope="session">
<html:select name="user" property="defaultLanguage">
<html:optionsCollection label="languageName" name="user" property="myLanguages" value="languageCode"/>
</html:select>
</logic:notEmpty>
下面是来自 jsp 的 Struts2(2.5.16 版本)代码片段,它不起作用
<s:if test="%{#session.user.myLanguages != null && #session.user.myLanguages != ''}">
<s:select list="{#session.user.myLanguages}"
listKey="languageCode" listValue="languageName"
name="user" value="defaultLanguage"/>
</s:if>
下面是来自jsp
的脚本代码<%
User user = (User) session.getAttribute("user");
Vector vMyLang = user.getMyLanguages();
System.out.println("logon.jsp:vMyLang--- "+vMyLang);
if(null != vMyLang){
System.out.println("logon.jsp:vMyLang----- "+vMyLang.size());//here output(i.e size) is 20
}
%>
会话中存在值,但我无法使用 strut2 标签, 日志中没有 error/exception
Struts1 代码工作正常,Struts2 代码不工作(我的意思是 UI 中没有显示下拉列表)
请帮我指出我做错了什么。
JSP 和 scriptlet 不等同。
在您的 scriptlet 中,您正在 调用 一个名为 myLanguages()
的方法。
在您的 <s:if />
标记中,您正在 尝试 调用名为 getMyLanguages()
.
因为您没有遵循 JavaBean 命名约定,您不能使用 OGNL 提供的语法糖,您需要实际调用该方法。
注意:您应该遵循 JavaBean 命名约定;他们是有原因的约定。任何依赖反射的Java,比如OGNL,都需要它。
用下面的代码修复
<s:if test="%{#session.user.myLanguages != null}">
<s:select list="%{#session.user.myLanguages}"
listKey="languageCode" listValue="languageName"
value="%{#session.user.defaultOperaLanguage}/>
</s:if>