Struts2.1.8中的一个问题

wenjjing2lianee 2009-12-30 06:59:27
最近在看Struts2.1.8里的标签部分,在Struts1.X当中没有看到<s:doubleselect>这样的标签
把官方里的例子试了下竟然出错:
doubleselect.jsp内容:
<%@ taglib prefix="s" uri="/struts-tags"%>
<s:doubleselect label="doubleselect test1"
name="menu"
list="{'fruit','other'}" doubleName="dishes"
doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />

使用struts-->jsp
struts.xml配置
<package name="test" extends="struts-default">
<action name="*">
<result>/{1}.jsp</result>
</action>
</package>

...

当我用 http://localhost:8080/Struts2.1.8/doubleselect去访问(工程名为:Struts2.1.8)
就出现写面这个错
FreeMarker template error!
Expression parameters.formName is undefined on line 111, column 43 in
template/simple/doubleselect.ftl.
The problematic instruction:
----------
==> ${parameters.formName} [on line 111, column 41 in template/simple/doubleselect.ftl]
in include "/${parameters.templateDir}/simple/doubleselect.ftl" [on line 25, column 1 in template/xhtml/doubleselect.ftl]
----------

Java backtrace for programmers:
----------
freemarker.core.InvalidReferenceException: Expression parameters.formName is
undefined on line 111, column 43 in template/simple/doubleselect.ftl.
at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124)
at freemarker.core.Expression.getStringValue(Expression.java:118)
at freemarker.core.Expression.getStringValue(Expression.java:93)
......


在官网上找到了一个补丁,感觉那个问题我和的有点像,我就下下来打上了,没想到打了还是报相同的错。
这个补丁地址为:https://issues.apache.org/struts/browse/WW-3274
不知道有没有朋友碰到过,请帮帮忙.

...全文
280 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Creating 2010-11-25
  • 打赏
  • 举报
回复
确实要放到form里,right
yulu0214 2009-12-31
  • 打赏
  • 举报
回复
<s:doubleselect label="doubleselect test1"
name="menu"
list="{'fruit','other'}" doubleName="dishes"
doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />

改成
<s:doubleselect formName="formName" label="doubleselect test1"
name="menu"
list="{'fruit','other'}" doubleName="dishes"
doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />

就可以了
yulu0214 2009-12-31
  • 打赏
  • 举报
回复
文档有错,错误提示说的很清楚,少了个formName属性,也就是doubleList最外面的form的名字,因为它要生成js来操作联动选框,使用document.formName.selectName来定位的。
formName属性在DoubleListUIBean里面有定义

建议自己写联动的js库
wenjjing2lianee 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 redlotus_lyn 的回复:]
<%@ taglib prefix="s" uri="/struts-tags"%>
<s:doubleselect label="doubleselect test1"
name="menu"
list="{'fruit','other'}" doubleName="dishes"
doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />

例子没有问题。

但menu和dishes必须在Action中定义,并有get/set方法。
[/Quote]

我试试看
redlotus_lyn 2009-12-31
  • 打赏
  • 举报
回复
<%@ taglib prefix="s" uri="/struts-tags"%>
<s:doubleselect label="doubleselect test1"
name="menu"
list="{'fruit','other'}" doubleName="dishes"
doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />

例子没有问题。

但menu和dishes必须在Action中定义,并有get/set方法。
marf_cn 2009-12-31
  • 打赏
  • 举报
回复
这个东西还是不要用了,不如自己实现的好。他这个练个样式都不能变
wenjjing2lianee 2009-12-31
  • 打赏
  • 举报
回复
可能是这标签没什么人用哦,呵呵
wenjjing2lianee 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zl3450341 的回复:]
无语 ~
struts2表情肯定要放到s:form里面才能用啊
[/Quote]

不是所有的都要,但这确实我有点错
zl3450341 2009-12-31
  • 打赏
  • 举报
回复
无语 ~
struts2表情肯定要放到s:form里面才能用啊
wenjjing2lianee 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yulu0214 的回复:]
<s:doubleselect label="doubleselect test1"
name="menu"
list="{'fruit','other'}" doubleName="dishes"
doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />

改成
<s:doubleselect formName="formName" label="doubleselect test1"
name="menu"
list="{'fruit','other'}" doubleName="dishes"
doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />

就可以了
[/Quote]
虽然不是这样的,但还是谢谢
wenjjing2lianee 2009-12-31
  • 打赏
  • 举报
回复
找到原因了,我的代码应该放要放在<s:form></s:form>当中,doubleselect.ftl模版里面是通过form的name属性定位的.
FreeMarker template error!
Expression parameters.formName is undefined on line 111, column 43 in
parameters.formName就是表单名称.
代码应该为:
<s:form name="myform">
<s:doubleselect label="doubleselect test1" name="menu"
list="{'fruit','other'}" doubleName="dishes"
doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />
</s:form>

谢谢大家,提醒一下如果是学习sturts2的标签,一定要着放在<s:form>中,很多模版都是通过formName定位.

<:doubleselect>是可以联动的,不用自己写js

zl3450341 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 crazylaa 的回复:]
把你的uri改成官方的uri试试
<%@ taglib prefix="s" uri="/struts-tags"%>
好像有个http://.........打头的uri。具体不知道,不会s2。
[/Quote]

struts2的是这个
这个标签具体还没用过呢
只看到官网这么介绍的
crazylaa 2009-12-30
  • 打赏
  • 举报
回复
把你的uri改成官方的uri试试
<%@ taglib prefix="s" uri="/struts-tags"%>
好像有个http://.........打头的uri。具体不知道,不会s2。
wenjjing2lianee 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zl3450341 的回复:]
官方文档例子
Java code<s:doubleselect label="doubleselect test1" name="menu" list="{'fruit','other'}" doubleName="dishes" doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}"/><s:doubleselect label="doubleselect test2" name="menu" list="#{'fruit':'Nice Fruits', 'other':'Other Dishes'}" doubleName="dishes" doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}"/>
[/Quote]

Thx,就是官方第一个例子啊
zl3450341 2009-12-30
  • 打赏
  • 举报
回复
官方文档例子
<s:doubleselect label="doubleselect test1" name="menu" list="{'fruit','other'}" doubleName="dishes" doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />
<s:doubleselect label="doubleselect test2" name="menu" list="#{'fruit':'Nice Fruits', 'other':'Other Dishes'}" doubleName="dishes" doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧