struts2 - 在struts2中选择下拉,从struts1迁移到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 标记,日志中没有错误/异常
Struts1 代码工作正常,Struts2 代码不工作(我的意思是 UI 中不显示下拉菜单)
请帮我看看我犯了什么错误。
解决方案
JSP 和 scriptlet 不是等价的。
在您的 scriptlet 中,您正在调用一个名为myLanguages()
.
在您的<s:if />
标签中,您尝试调用名为getMyLanguages()
.
由于您没有遵循 JavaBean 命名约定,因此您不能使用 OGNL 提供的语法糖,您需要实际调用该方法。
注意:您应该遵循 JavaBean 命名约定;他们是一个约定是有原因的。任何依赖反射的 Java,比如 OGNL,都需要它。
推荐阅读
- python - 当stdout没有结果时如何显示stderr输出
- c# - Docker 的 .Net Core 3.1 API SSL 配置
- swagger - Swagger /v2/apo-docs 插入
标签 - algorithm - 证明最优子结构的不同方法?
- python - pd.read_pickle 只读第一行
- android - 将应用上传到 Playstore 后 Firebase OTP 无法正常工作
- java - 是否有任何 API 可以获取 OCI Shape 的价格
- python - 无法执行脚本 main
- javascript - 材料表中是否有自定义排序功能来对文件大小进行排序?
- javascript - 在 ReactJs 中使用映射函数时出现错误“无法读取未定义的属性‘映射’”