さまざまなタイプのフィールドを持つ Struts2 のフォームがあります。フォームにデータを入力して送信すると、入力されたデータは評価されず、ActionSupport
クラスではnull
. 私の問題のサンプルの下
struts.xml
:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="false" />
<constant name="struts.action.extension" value="do" />
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.objectFactory.spring.autoWire" value="name" />
<constant name="struts.i18n.encoding" value="ISO-8859-1" />
<constant name="struts.i18n.reload" value="false" />
<constant name="struts.configuration.xml.reload" value="false" />
<constant name="struts.locale" value="fr" />
<constant name="struts.multipart.maxSize" value="100000000000" />
<package name="default" extends="tiles-default" namespace="/">
<interceptors>
<interceptor name="params-filter"
class="com.opensymphony.xwork2.interceptor.ParameterFilterInterceptor" />
<interceptor-stack name="defaultStack">
<interceptor-ref name="exception" />
<interceptor-ref name="alias" />
<interceptor-ref name="servlet-config" />
<interceptor-ref name="i18n" />
<interceptor-ref name="chain" />
<interceptor-ref name="model-driven" />
<interceptor-ref name="fileUpload">
<param name="maximumSize">11204928</param>
</interceptor-ref>
<interceptor-ref name="static-params" />
<interceptor-ref name="conversionError" />
<interceptor-ref name="params" />
<interceptor-ref name="prepare" />
<interceptor-ref name="validation" />
<interceptor-ref name="workflow" />
<interceptor-ref name="userAware" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="defaultStack" />
<global-results>
<result name="technicalError" type="chain">
errorAction
</result>
<result name="sessionInvalidError" type="tiles">
sessionInvalid
</result>
<result name="blank" type="tiles">blank</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception"
result="technicalError" />
<exception-mapping
exception="com.omb.service.exception.UserSessionInvalidException"
result="sessionInvalidError" />
</global-exception-mappings>
<package name="omb" extends="default" namespace="/omb">
<action name="*OMBAction" class="com.omb.MyAction" method="doMyAction">
<result name="ok" type="tiles">maPage</result>
</action>
</package>
</struts>
JSP ファイル:
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib uri="http://displaytag.sf.net/el" prefix="display"%>
<link rel="stylesheet" href="<s:url value="/windowfiles/dhtmlwindow.css"/>" type="text/css" />
<script language="javascript"><!--
mes scripts
--></script>
<s:form action="valoriseHiddenOMBAction.do" theme="simple" id="hiddenForm">
<s:hidden name="champ1" value="%{champ1}"></s:hidden>
<s:hidden name="champ2" value="%{champ2}"></s:hidden>
</s:form>
<table height="100%" width="100%" border="0">
<s:form action="doOMBAction.do" name="ombForm" id="idOmbForm" theme="simple">
<s:hidden name="user.userId" value="%{user.userId}"></s:hidden>
<s:hidden name="period.periodId" value="%{period.periodId}"></s:hidden>
<tr>
<td>
<input type="button" value="download" onclick = "javascript:location.href='afficheOMBReport.do';"/>
</td>
</tr>
<tr>
<td width="10%"><label ><s:text name="champ1.label"></s:text></label></td>
<td width="4%"> </td>
<td width="10%"><label ><s:text name="champ2.label"></s:text></label></td>
</tr>
<tr>
<td>
<s:select cssStyle="width:200" list="listChamp1" id="idChamp1"
value="champ1.identifiant" listKey="identifiant" listValue="label"/>
</td>
<td> </td>
<td>
<s:select cssStyle="width:200" list="listChamp2" id="idChamp2"
value="champ2.identifiant" listKey="identifiant" listValue="label"/>
</td>
</tr>
<tr>
<td>
<input type="button" value="Afficher les valeurs" onclick = "javascript:location.href='afficheValuesOMBAction.do';"/>
</td>
</tr>
</s:form>
</table>
Java ファイル:
Champ.java
:
/**
*
*/
package com.omb;
public class Champ {
private Integer identifiant;
private String label;
public Champ(Integer identifiant, String label) {
super();
this.identifiant = identifiant;
this.label = label;
}
/**
* @return the identifiant
*/
public Integer getIdentifiant() {
return identifiant;
}
/**
* @param identifiant the identifiant to set
*/
public void setIdentifiant(Integer identifiant) {
this.identifiant = identifiant;
}
/**
* @return the label
*/
public String getLabel() {
return label;
}
/**
* @param label the label to set
*/
public void setLabel(String label) {
this.label = label;
}
}
MyAction
クラス:
/**
*
*/
package com.omb;
import java.util.ArrayList;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
/**
* @author ombinte
*
*/
public class MyAction extends ActionSupport {
private Champ champ1;
private Champ champ2;
private List<Champ> listChamp1;
private List<Champ> listChamp2;
public String execute() throws Exception {
listChamp1 = new ArrayList<Champ>();
listChamp1.add(new Champ(1, "valeur1"));
listChamp1.add(new Champ(2, "valeur2"));
listChamp2 = new ArrayList<Champ>();
listChamp2.add(new Champ(3, "valeur3"));
listChamp2.add(new Champ(4, "valeur4"));
return SUCCESS;
}
public String doMyAction() {
System.out.println("ID Champ 1 = " + champ1.getIdentifiant());
System.out.println("Label Champ 1 = " + champ1.getLabel());
System.out.println("ID Champ 2 = " + champ2.getIdentifiant());
System.out.println("Label Champ 2 = " + champ2.getLabel());
return "ok";
}
/**
* @return the champ1
*/
public Champ getChamp1() {
return champ1;
}
/**
* @param champ1 the champ1 to set
*/
public void setChamp1(Champ champ1) {
this.champ1 = champ1;
}
/**
* @return the champ2
*/
public Champ getChamp2() {
return champ2;
}
/**
* @param champ2 the champ2 to set
*/
public void setChamp2(Champ champ2) {
this.champ2 = champ2;
}
/**
* @return the listChamp1
*/
public List<Champ> getListChamp1() {
return listChamp1;
}
/**
* @param listChamp1 the listChamp1 to set
*/
public void setListChamp1(List<Champ> listChamp1) {
this.listChamp1 = listChamp1;
}
/**
* @return the listChamp2
*/
public List<Champ> getListChamp2() {
return listChamp2;
}
/**
* @param listChamp2 the listChamp2 to set
*/
public void setListChamp2(List<Champ> listChamp2) {
this.listChamp2 = listChamp2;
}
}