チケットクラス:
@Entity
@Table(name="tickets")
public class Ticket implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name="requester_name")
private String requesterName;
@ManyToOne
private BusinessPurpose business_purpose;
@ManyToOne
private Park park;
@Column(name="no_of_tickets")
private Integer noOfTickets;
@ManyToOne
private Status status;
@ManyToOne
private User user;
これは、ユーザーが新しいチケットの詳細を入力できる jsp の部分です。この jsp は、すべてのフィールドが定義されている ticketDTO オブジェクトを介してデータを取得します。
function submitRegistration()
{
var bpl = document.getElementById("bpl");
document.forms['ticketRequestForm'].businessPurpose.value = bpl.options[bpl.selectedIndex].text;
document.forms['ticketRequestForm'].park.value = document.forms['ticketRequestForm'].parkName.options[document.forms['ticketRequestForm'].parkName.selectedIndex].text;
document.forms['ticketRequestForm'].stateName.value = document.forms['ticketRequestForm'].stateId.options[document.forms['ticketRequestForm'].stateId.selectedIndex].text;
document.forms['ticketRequestForm'].countryName.value = document.forms['ticketRequestForm'].countryId.options[document.forms['ticketRequestForm'].countryId.selectedIndex].text;
return isValid();
}
<s:form id="ticketRequestForm" method="post"
action="submitTicket" theme="simple"
onsubmit="return submitRegistration();">
<s:hidden name="businessPurpose" />
<s:hidden name="park" />
<td id="formtxt" width="20%">Requestor's Name</td>
<td valign="middle">
<p class="form">
<s:textfield name="requesterName">
</s:textfield>
</p>
</td>
</tr>
<tr>
<td id="formtxt" width="15%">Business Purpose</td>
<td valign="middle">
<p class="form">
<s:select id="bpl" list="businessPurposeList"
name="businessPurposeId" listKey="id"
listValue="businessPurposeName" onchange="businessList();"></s:select>
</p>
</td>
</tr>
<td id="formtxt" width="15%">Which Park</td>
<td valign="middle">
<p class="form">
<s:select list="parkList" name="parkId" listKey="id"
listValue="name"></s:select>
</p>
</td>
</tr>
</table>
</s:form>
PS: これは、動作中の JSP からのストリップ ダウン バージョンです。記事を短くしようとしていたため、いくつかのタグの欠落に注意してください。私の主な焦点は、オブジェクト内のオブジェクトによって作成されるリストです。
ここでの最初の質問は、保存操作と編集操作の両方に 1 つの jsp を使用できますか?? 1 つのチケット オブジェクトで完全な詳細を取得できます。
しかし今のところ、編集用に別の jsp を実装しました。この jsp ファイルは、アクション クラスに設定されたチケット オブジェクトを介して値を取得します。
function submitRegistration()
{
var bpl = document.getElementById("bpl");
document.forms['ticketRequestForm'].businessPurpose.value = bpl.options[bpl.selectedIndex].text;
document.forms['ticketRequestForm'].park.value = document.forms['ticketRequestForm'].parkName.options[document.forms['ticketRequestForm'].parkName.selectedIndex].text;
document.forms['ticketRequestForm'].stateName.value = document.forms['ticketRequestForm'].stateId.options[document.forms['ticketRequestForm'].stateId.selectedIndex].text;
document.forms['ticketRequestForm'].countryName.value = document.forms['ticketRequestForm'].countryId.options[document.forms['ticketRequestForm'].countryId.selectedIndex].text;
return isValid();
}
<s:form id="ticketRequestForm" method="post"
action="editTicket" theme="simple"
onsubmit="return submitRegistration();">
<s:hidden name="businessPurpose" />
<s:hidden name="park" />
<s:hidden name="stateName" />
<s:hidden name="countryName" />
<tr>
<td id="formtxt" width="20%">Requestor's Name</td>
<td valign="middle">
<p class="form">
<s:textfield name="%{ticket.requesterName}" value="%{ticket.requesterName}">
</s:textfield>
</p>
</td>
</tr>
<tr>
<td id="formtxt" width="15%">Business Purpose</td>
<td valign="middle">
<p class="form">
<s:select id="bpl" list="businessPurposeList"
name="%{ticket.businessPurpose.businessPurposeId}" listKey="id"
listValue="%{ticket.businessPurpose.businessPurposeName}" onchange="businessList();"></s:select>
</p>
</td>
<td id="formtxt">Country</td>
<td valign="middle">
<p class="form">
<s:select list="countriesList" name="ticket.country.countryId" listKey="id"
listValue="ticket.country.countryName"></s:select>
</p>
<p class="yellowLg">All fields are required.</p>
<p>
<s:submit name="Submit" title="Submit"></s:submit>
</p>
</table>
</s:form>
問題:私の問題は、実際にはメイン オブジェクト内のオブジェクトである編集ページ内のリストを表示できないことです。ここで、多対 1 の関係が明確になることを願っています。BusinessPurpose と同様に、hibernate を介してテーブルにマップされた pojo であり、Ticket クラスにはこのオブジェクトが多対 1 としてマップされています。ParkとStatusも同様です。私がやろうとしているのは、すべてのパークとステータスのリストを取得し、それを struts タグに表示して、後で編集する値を取得することです。しかし、編集ページでは、リスト全体が以前の値で満たされています。編集された/新しい値を持つアクションクラス内のチケットオブジェクトを取り戻すにはどうすればよいですか?
理解できない場合は、不明な部分を指摘してください。詳しく説明してみます。