フィールド (電話、メール、パスワード) を含むフォームを作成したいのですが、正確なレイアウトはこちらを参照してください。編集ボタンがクリックされない限り、フォームはすべてラベルとして表示され、ラベルはテキストボックスになります。Grails ボタンには表示/読み取り専用のプロパティがないため、リモートアクション ボタンを選択しました。私の問題は、作成したテンプレートを含むフォームにすべてを表示できないように見えることです (編集ボタンをクリックしない限り、ラベル/テキスト フィールドが表示されます) が、最初の読み込みでは表示されません。
テンプレート: 電子メール:
<g:if test="${!isEditEmail}">
<td id="email">${profileInstance?.email}</td></g:if>
<g:else>
<td><g:textField name="emailTxt" value="${profileInstance?.email}" />
</td></g:else>
電話
<g:if test="${!isEditPhone}">
<td id="email">${profileInstance?.phone}</td></g:if>
<g:else>
<td><g:textField name="emailTxt" value="${profileInstance?.phone}" />
</td></g:else>
電話の「プロファイル」と呼ばれる My GSP のスニペット コード:
<th scope="row"><label for="profileEditPhone">Phone:</label></th>
<td id="showPhoneText"></td>
<td><g:actionSubmit id="btnEditPhone" action="setPhoneTxtAreaVisible" update="showPhoneText" value="${message(code: 'default.button.edit.label', default: 'Edit')}" /></td>
</tr>
ここに私のコードがあります:
def setPhoneTxtAreaVisible=
{
def employeeId= params.employeeId
MySession session = MySession.getMySession(request, params.employeeId)
isEditPhone=true
profileInstance = session.profileInstance
render(template:"/layouts/phoneProfile", model:[profileInstance:session.profileInstance, isEditPhone:true])
}
これは <td id="showPhoneText"></td>
うまく機能していますが、「btnEditPhone」ボタンをクリックしない限り、出力には値がなく、GSP (プロファイル) に表示されません。
だから私は自分のコードを次のように変更しました:
def profile=
{
def employeeId= params.employeeId
MySession session = MySession.getMySession(request, employeeId)
//findAllByCmCaseIdCmCase
def employee = Employee.get(employeeId as Long)
def empUser = EmployeeUser.findByEmployeeIdEmployee(employee)
profileInstance = new Profile();
profileInstance.id=employeeId as Long
profileInstance.userName = empUser.useridUsers.username
profileInstance.password = empUser.useridUsers.passwordText
profileInstance.email = employee.emplEmailAddr
profileInstance.employeeName = employee.formatFirstLastName()
profileInstance.phone = employee.formattedEmplWorkTelNbr()
session.profileInstance = profileInstance
if(profileInstance)
{
render(template:"/layouts/phoneProfile", model:[profileInstance:session.profileInstance, isEditPhone:false])
}
return [profileInstance: profileInstance, mySession: session, isEditEmail:false]
}
-うまく機能しません。電話テンプレートのみをレンダリングします。
そのため、更新を使用する代わりに、html コードをこれに変更しました
<tr>
<th scope="row"><label for="profileEditPhone">Phone:</label></th>
<td ><g:render template="/layouts/phoneProfile" /></td>
<td> <g:submitToRemote action="setPhoneTxtAreaVisible" value="${message(code: 'default.button.edit.label', default: 'Edit')}" /></td>
<td> </td>
</tr>
- 思い通りに動かない。
質問: 編集ボタンをクリックせずに、FIRST LOAD にすべてのテンプレートが既にあるプロファイル ページを表示するにはどうすればよいですか?