带有Struts的Java对象下载

时间:2012-11-12 05:17:13

标签: struts2

我正在使用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

2 个答案:

答案 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>