(对不起帖子的长度!!)
编辑:
动态地我的意思是 - >当选择下拉列表更改时,我希望其他下拉列表的内容也会发生变化。谢谢!
我正在尝试动态填充jsp中的下拉菜单(我想这是一个非常常见的问题)。我正在使用struts 2框架。
我通过谷歌搜索和一些书籍找到了一些解决方案,但大多数都需要在jsp页面中编写很多脚本,我不想这样做,因为我觉得这不是一个好习惯。
我希望找到一种方法,我可以通过onChange事件调用一个动作,其中所有的编码部分都可以完成(当然会使用一些脚本:))。
我找到的一种方法是使用dojo。除了2个问题外,我实现了它并且工作正常:
即使任何下拉列表的选择没有改变,也会在加载页面本身时调用该操作。
以下错误消息显示在具有下拉菜单的表单上方 - > “加载'/GetLists.htm'时出错(500内部服务器错误)”。
我想问的另一个问题是,这是一种实现动态填充下拉的好方法。我的想法是在jsp页面上正确避免脚本。
以下是编码:
jsp页面:
<s:form id="lists" action="viewDayReport">
<s:url id="scriptURL" action="GetLists"/>
<sd:div listenTopics="getLists" href="%{scriptURL}" formId="lists" showLoadingText="Working..."/>
<s:select label="Customer " name="customer" headerKey="0" headerValue="Select" list="customerList" onchange="dojo.event.topic.publish('getLists');return false;"/>
<s:select label="Contact " name="contact" headerKey="0" headerValue="Select" list="contactList" onchange="dojo.event.topic.publish('getLists');return false;"/>
<s:select label="Employee " name="employee" headerKey="0" headerValue="Select" list="employeeList" onchange="dojo.event.topic.publish('getLists');return false;"/>
<s:select label="Stage " name="stage" headerKey="0" headerValue="Select" list="stageList" onchange="dojo.event.topic.publish('getLists');return false;"/>
<s:select label="Type " name="type" headerKey="0" headerValue="Select" list="typeList" onchange="dojo.event.topic.publish('getLists');return false;"/>
<sd:datetimepicker label="Date" name="date" displayFormat="dd/MM/yyyy" />
<s:submit value="View Report(s)"/>
</s:form>
这是struts配置文件:
<struts>
<package name="Deutek.admin" extends="struts-default" >
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
//this is the action that is executed when the page first loads. It populates the lists for drop downs
<action name="dayReportPage" class="admin.dayReportAction">
<result type="tiles">dayReport</result>
</action>
//this is the action that is executed when a drop down selection is changed. currently the action just prints some output.
<action name="GetLists" class="admin.GetListsAction">
<result type="tiles">dayReport</result>
</action>
</package>
</struts>
答案 0 :(得分:0)
我建议使用ether 1.从struts动作类中填充它或2.在jsp级别通过静态方法调用。
如果要在struts操作中设置列表,可以通过在操作中实现Preparable来实现:
public MyAction extends ActionSupport implements Preparable{
private List customerList;
public void prepare(){
customerList= CustomersDAO.getCustomerList();
}
// Getters and Setters
}
然后你可以从jsp中获取列表:
<s:select label="Customer " name="customer" headerKey="0" headerValue="Select"
List="customerList"/>
要设置动态方法调用,您可以直接访问上一个示例中的CustomersDAO对象,如下所示:
<s:select label="Customer " name="customer" headerKey="0" headerValue="Select"
List="@com.mypackage.CustomersDAO@getCustomerList()"/>
要启用静态方法访问,请在struts.properties文件中设置struts2常量:
struts.ognl.allowStaticMethodAccess = true
答案 1 :(得分:0)