`
aine_pan
  • 浏览: 43841 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Struts2 中select使用心得

    博客分类:
  • dojo
阅读更多
最近学习SHH,发现真的很蛋疼,封装的太多,debug起来就是觉得不爽,搞了所有的source再学习,感觉才好点。
今天记录点Ajax select标签。
先看看实现:
 <s:url id="temp" value="**.action"></s:url>
<sx:div href="%{temp}" theme="simple"/>

这个struts是2.1版本以上的,ajax div标签已经改变了。
看看后台响应action的地方:
	public String list(){
		tempList = service.getList();
		return SUCCESS;
	}

调用逻辑层返回用于显示在页面上的数据源List,当然get set方法不能少。
在返回的页面放一个select标签:
<s:select list="tempList" listKey="id" listValue="valueName" cssStyle="width:145px;" 
name="paraName" value ="paraValue" emptyOption = "false" headerKey="0" headerValue="请选择..."/>

tempList 对应的是后台的list名称,必须有get set构造器
listKey="id" listValue="valueName" 对应的是需要展现的list的key和value的栏位名,用于下发select时候。
name="paraName" 表示当前控件的名称,提交表单中的name
value ="paraValue" 表示当前控件的值,是用户选择后的值
headerKey 表示默认加一个选项,显示成“请选择。。。”的样式

至此已经可以展现动态的list在页面了,下面主要解决如果默认让select选中一个值,比如在edit页面,load下来这个list的时候,希望默认选中之前的值。本来我试着通过前台的ajax来实现,因为<sx:div>标签有afterNotifyTopics属性,即在ajax加载完成之后发表的话题清单。大约要这样实现:
<script type="text/javascript">
dojo.event.topic.subscribe("topicName",function(event,widget){
	dojo.byId("divName").value = 0;
});
</script>

这样就要求div定义如下:
<s:url id="temp" value="**.action">
		    	</s:url>
		    	<sx:div id ="divName" href="%{temp}“ afterNotifyTopics = "topicName"  theme="simple"/>

我最初以为这样可以实现选择select的某个值,但是结果可想而知,根本不能实现,因为div标签被dojo转义了,dojo.byId("divName")取到的是什么对象我也不太清楚,找不到设置选中项的属性,试了好久,如果哪位知道可以告诉我。

后来换了思路,使用了后台的赋值逻辑,struts已经帮我们封装好了,只要你数据源中存在对应的值,并且相应的构造函数都有了,struts会自动将值填上去的(model驱动)。前提是在页面上用param标签将需要需要显示的值传给后面的显示页面:
<s:url id="temp" value="**.action">
  <s:param name="paraName" value="paraValue" />
</s:url>
<sx:div href="%{temp}" theme="simple"/>

我之前犯错了,在**.action中没有写需要显示的值的构造函数。
其实回过头来想想,页面赋值肯定不用那么麻烦的自己去实现,struts肯定已经想到了,而使用param标签可以在action中赋值对应的值,这样在load显示页面的时候就肯定已经有值了。struts其实帮我们做了大部分的事情,而我们只要知道,我们还需要填些什么。
终于搞完了,自学还是需要点力气的。
记录以备查看
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics