その選択の各オプションに対して入力を指定する選択を作成しようとしています。
たとえば、 select にはA,B,C
オプションがあります。を選択するA
と、1 つのテキスト フィールドと 1 つのファイル アップロード フィールドが表示されます。代わりに B を選択すると、2 つのテキストフィールドが表示されます。
これは JEE アプリケーションであり、Struts2、struts2-json-plugin、struts2-jquery-plugin を使用しています。
ドキュメントに従おうとしましたが、うまくいきません。
アクション:
@Actions({
@Action(
value="jsonsample",
results={ @Result(name="success",type="json")}
)
})
public String execute() throws Exception{
List<SignatureKeyType> signatureKeyTypes = signatureKeyTypeService.findAll();
signatureKeyTypesSubscriber = new ArrayList<SignatureKeyType>();
signatureKeyTypesServer = new ArrayList<SignatureKeyType>();
for (int i=0; i<signatureKeyTypes.size(); i++) {
if(signatureKeyTypes.get(i).getFlag()==1){
signatureKeyTypesSubscriber.add(signatureKeyTypes.get(i));
}else{
signatureKeyTypesServer.add(signatureKeyTypes.get(i));
}
}
listParamSubscriber = new ArrayList<SignatureKeyTypeParameter>();
for (SignatureKeyType signatureKeyTypeSub : signatureKeyTypesSubscriber) {
listParamSubscriber = signatureKeyTypeSub.getSignatureKeyTypeParameter();
}
listParamServer = new ArrayList<SignatureKeyTypeParameter>();
for (SignatureKeyType signatureKeyTypeServer : signatureKeyTypesServer) {
listParamServer = signatureKeyTypeServer.getSignatureKeyTypeParameter();
}
return SUCCESS;
}
public String getJSON() throws Exception{
return execute();
}
JSP:
<s:url var="remoteurl" action="jsonsample"/>
<sj:select href="%{remoteurl}"
id="echo"
name="echo"
list="signatureKeyTypesSubscriber"
listKey="idSignatureKeyType"
listValue="label"
emptyOption="true"
headerKey="-1"
headerValue="Please Select"
/>
署名鍵の種類:
@Entity
@Table(name="signaturekeytype")
public class SignatureKeyType extends Tokenizable{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long idSignatureKeyType;
@Column(name = "label", nullable = false)
private String label;
@Column(name = "flag")
private int flag;
@OneToMany(mappedBy = "signatureKeyType")
private List<ServerSignature> serverSignatures;
@OneToMany(mappedBy = "signatureKeyType")
private List<SubscriberSignature> subscriberSignatures;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "signatureKeyType", cascade = CascadeType.ALL)
private List<SignatureKeyTypeParameter> signatureKeyTypeParameter;
public Long getIdSignatureKeyType() {
return idSignatureKeyType;
}
/** @param newIdSignatureKeyType */
public void setIdSignatureKeyType(Long newIdSignatureKeyType) {
idSignatureKeyType = newIdSignatureKeyType;
}
public String getLabel() {
return label;
}
/** @param newLabel */
public void setLabel(String newLabel) {
label = newLabel;
}
public List<ServerSignature> getServerSignatures() {
return serverSignatures;
}
public void setServerSignatures(List<ServerSignature> serverSignatures) {
this.serverSignatures = serverSignatures;
}
public List<SubscriberSignature> getSubscriberSignatures() {
return subscriberSignatures;
}
public void setSubscriberSignatures(List<SubscriberSignature> subscriberSignatures) {
this.subscriberSignatures = subscriberSignatures;
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
public List<SignatureKeyTypeParameter> getSignatureKeyTypeParameter() {
return signatureKeyTypeParameter;
}
public void setSignatureKeyTypeParameter(List<SignatureKeyTypeParameter> signatureKeyTypeParameter) {
this.signatureKeyTypeParameter = signatureKeyTypeParameter;
}
}
最初の問題は、選択でリストを取得できないことです。単純なStruts選択を使用する<s:select>
と機能し、リストを表示できますが、使用<sj:select>
できない場合、JSONが原因であると推測しますが、それが何であるかを正確に理解することはできません。