【发布时间】:2015-01-05 11:31:06
【问题描述】:
我在表单中有一个表格,其中包含下拉菜单和隐藏的input。
JSP:
<form action="modifyfaculty" method="post">
<table>
<thead class="center">
<tr>
<!-- column names here -->
</tr>
</thead>
<tbody>
<c:forEach var="professor" items="${facultyList}">
<tr>
<!-- more <td> -->
<td align="center">
<c:choose>
<c:when test="${professor.profEmplStatus.equals('FULL')}">
<select name="profEmplStatus" required>
<option value="FULL" selected>FULL</option>
<option value="PART">PART</option>
<option value="RET">RET</option>
<option value="TRMTD">TRMTD</option>
</select>
</c:when>
<!-- more <c:when> blocks -->
</c:choose>
</td>
<td align="center">
<c:choose>
<c:when test="${professor.profDept.equals('BSCS-SE')}">
<select name="profDept" required>
<option value="BA-MMA">BA-MMA</option>
<option value="BFDT">BFDT</option>
<option value="BS-AN">BS-AN</option>
<option value="BS-GPD">BS-GPD</option>
<option value="BSBA-FM">BSBA-FM</option>
<option value="BSBA-MKT">BSBA-MKT</option>
<option value="BSCS-SE" selected>BSCS-SE</option>
<option value="BSIT-WD">BSIT-WD</option>
<option value="GENED">GENED</option>
</select>
</c:when>
<!-- more <c:when> blocks -->
</c:choose>
</td>
<td class="center">
<input type="hidden" name="profId" value="${professor.profId}" />
<input type="submit" value="Save" />
</td>
</tr>
</c:forEach>
</tbody>
</table>
</form>
ModifyFacultyAction:
public class ModifyFacultyAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private Integer profId;
private String profEmplStatus;
private String profDept;
@Override
public String execute() {
FacultyManager fm = new FacultyManager();
fm.modifyFaculty("professor_employment_status", profEmplStatus, profId);
fm.modifyFaculty("professor_department", profDept, profId);
return SUCCESS;
}
public Integer getProfId() {
return profId;
}
public void setProfId(Integer profId) {
this.profId = profId;
}
public String getProfEmplStatus() {
return profEmplStatus;
}
public void setProfEmplStatus(String profEmplStatus) {
this.profEmplStatus = profEmplStatus;
}
public String getProfDept() {
return profDept;
}
public void setProfDept(String profDept) {
this.profDept = profDept;
}
}
struts.xml:
<action name="modifyfaculty" class="com.mypackage.action.ModifyFacultyAction">
<interceptor-ref name="notauth" />
<interceptor-ref name="defaultStack" />
<result type="redirectAction">
<param name="actionName">viewfaculty</param>
</result>
<result name="input" type="redirectAction">
<param name="actionName">viewfaculty</param>
</result>
<result name="index" type="redirect">/index.jsp</result>
</action>
输出:
但是,在从下拉列表中选择新值并单击 Save 时,我收到错误消息。以下是devMode 日志:
Jan 05, 2015 11:34:43 PM com.opensymphony.xwork2.interceptor.ParametersInterceptor error
SEVERE: Developer Notification (set struts.devMode to false to disable this message):
Unexpected Exception caught setting 'profId' on 'class com.mypackage.action.ModifyFacultyAction: Error setting expression 'profId' with value ['100005', '100006', '100007', '100008', '100009', '100010', '100011', ]
Jan 05, 2015 11:34:43 PM com.opensymphony.xwork2.util.LocalizedTextUtil warn
WARNING: Missing key [invalid.fieldvalue.profId] in bundles [[org/apache/struts2/struts-messages, com/opensymphony/xwork2/xwork-messages]]!
如何解决?
【问题讨论】:
-
将
input结果和一些标签(actionerror/fielderror)添加到jsp以查看错误。 -
我添加了
<result name="input">,但它必须重定向到另一个操作(type="redirectAction")来呈现所需的JSP,所以我看不到字段错误消息。 -
所以不要重定向。打开开发模式。
-
至少,我已经将原因缩小到单击
Save时提交的表单7 次(教授/数据库条目的数量),因为整个表都在表单内。我仍然不确定如何实现预期目标。 -
您想一次保存整个表格吗?如果没有,则创建单独的表单或其他任何内容。
标签: java html jsp parameters struts2