我正在使用Strust2作为表示层。我有一个带有下拉列表的struts表单,它与java对象(Application)列表绑定。 下拉显示应用程序对象列表,用户可以选择一个Application并提交。当在Action类中检索用户输入值时,接收值类型为“String”,我们不能直接从struts下拉列表中检索对象,在我的例子中“应用程序”对象
private List<Application> applicaionList = new ArrayList<Application>();
@Autowired
private ApplicationService applicationService;
private Application application;
public void loadTheForm(){
applicationList = applicationService.findAll();
}
public void submitForm(){
Document doc = new Document();
doc.setApplication(application);
}
//Getter Setters...
}
application.jsp
<s:form action ="submitForm">
<s:select list ="applicationList" headerValue="---Select---" headerKey="-1" name="application"/>
</s:form>
struts.xml中
<action name="submitForm" class="com.ActionSupport" method="submitForm">
<result name="success" type="tiles">/newAdminDocumentRequired.tiles</result>
</action>
当用户从下拉列表中选择值并提交时,提交的值为string, 我们不能直接在Struts中获取对象,如果我们不能如何获取所选值的对象?
谢谢你, Udeshika
答案 0 :(得分:2)
我从你的问题中得到的是
1. You have to show list of applications as drop-down.
2. User selects one application and submit the form.
3. You have to retrieve the selected application and perform some action with it.
我假设你的Application类有一个属性'id',它对所有应用程序都是唯一的。还有一个applicationName,您必须向用户显示该名称。 所以现在,我会解决这个问题如下
<s:form action ="submitForm">
<s:select list ="applicationList" headerValue="---Select---" headerKey="-1" key="application" listKey="id" listValue="applicationName"/>
</s:form>
现在,此标记将创建如下的
下拉列表<select name="application">
<option value="-1" selected="selected">---Select---</option>
<option value="1">Demo 1 App</option>
<option value="2">Demo 2 App</option>
<option value="3">Demo 3 App</option>
<option value="4">Demo 4 App</option>
</select>
请注意,OPTION元素中的值(1,2,3,4)是application.id和titles(Demo 1 App,Demo 2 App等)是application.applicationName。
现在,用户将选择并提交。所选应用程序的ID将发送到参数“application”中的struts操作。 在Action中,您可以执行此操作
public MyClass extends ActionSupport{
private List<Application> applicaionList = new ArrayList<Application>();
@Autowired
private ApplicationService applicationService;
private **String** application;
public void loadTheForm(){
applicationList = applicationService.findAll();
}
public void submitForm(){
Application varApp = applicationService.findApplicationById(getApplication());
Document doc = new Document();
doc.setApplication(varApp);
}
//Getter Setters...
}
请注意我已将应用程序类型更改为String。是的,我认为你不能直接从下拉列表传递对象。
希望它有所帮助。
答案 1 :(得分:0)
Dropdown with object attributes
Here Example is shown for store object
//存储Bean类
calss Store{
private int storeId;
private String storeName;
//getter setter
}
//动作类 //在struts2动作类(模型驱动)中设置列表
List<Store> storeList=new ArrayList<>();
// JSP页面
<s:select id="store" name="store" headerKey="-1"
headerValue="Select Store " list="storeList"
listKey="storeId" listValue="storeId"
value="%{IteratorList[#status.index].itemBase.{storeId}}"
/></td>