SpringMVC-jsp文件对于各种控制器来说更加通用

slmsl1lt  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(394)

我有一个带有各种控制器的JavaSpringMVC项目。这些控制器具有添加、编辑和删除配置的功能。这些不同控制器的jsp文件几乎相同(只有参数的数量、页面的标题等不同)。
例如,我有一个jsp文件为服务器添加证书,其中包含供最终用户提及证书名称和位置的选项。另一个jsp文件是添加服务器详细信息,询问最终用户服务器名称、操作系统等。
所有这些jsp文件在submit按钮上都有类似的功能,在这里添加代码-

<div class="submitButton center">
            <input type="button" class="center actionButton" name="submitButton" value="${saveLbl}" id="submitButtonId" onclick="return submitForm('addForm', '${formAction}', '');"/>
            <c:if test="${repCertificateEntityForm.controllerModel.formType == 'ADD'}">
                <span class="padLeftMedium"></span>
                <input type="button" class="actionButton" name="saveButton"  value="Save and Add Another" id="saveAndAddAnotherButtonId" onclick="return submitForm('addForm', '${saveAndAddAnotherUrl}', '');"></input>
            </c:if>
            <c:if test="${repCertificateEntityForm.controllerModel.formType == 'EDIT' && showDelete}"> 
                <span class="padLeftMedium"></span>
                <input type="button" class="actionButton" name="deleteButton"  value="${deleteLbl}" id="deleteButtonId" onclick="return submitForm('addForm', '${deleteUrl}', 'Delete the Certificate?');"></input>
            </c:if>
            <span class="padLeftMedium"></span>
            <input type="button" class="actionButton" name="cancelButton"  value="Cancel" id="cancelButtonId" onclick="handleGetAction('${returnUrl}');" ></input>
        </div>

我所有的jsp文件都有这样的通用代码,唯一的区别是表单名(在本例中是repcertificateentityform)。我们是否可以有一个jsp文件来包含这个提交按钮代码,而我的所有jsp都会引用这个jsp文件并动态地将表单名传递给它?请建议。
编辑1:
在第一个jsp中,我添加了以下代码,用于调用第二个jsp并传递参数:

<jsp:include page="config.jsp" >
            <jsp:param name="formName" value="repCertificateEntityForm" />
        </jsp:include>

在config.jsp中,我添加了以下代码(我希望在本节中使用repcertificateentityform值访问param formname)-

<div class="submitButton center">
    <input type="button" class="center actionButton" name="submitButton" value="${saveLbl}" id="submitButtonId" onclick="return submitForm('addForm', '${formAction}', '');"/>
    <c:if test="${param.formName.controllerModel.formType == 'ADD'}">
        <span class="padLeftMedium"></span>
        <input type="button" class="actionButton" name="saveButton"  value="Save and Add Another" id="saveAndAddAnotherButtonId" onclick="return submitForm('addForm', '${saveAndAddAnotherUrl}', '');"></input>
    </c:if>
    <span class="padLeftMedium"></span>
    <input type="button" class="actionButton" name="cancelButton"  value="Cancel" id="cancelButtonId" onclick="handleGetAction('${returnUrl}');" ></input>
</div>

现在,如果我在这个div块中传递repcertificateentityform的硬编码值,一切都正常,但是我希望通过jsp参数来完成,这样表单名就变成动态的。谢谢你。

b5lpy0ml

b5lpy0ml1#

你可以用 <jsp:include> 用一个 <jsp:param> .

<jsp:include page="yourFragment.jsp" >
 <jsp:param name="formName" value="repCertificateEntityForm" />
</jsp:include>

请在此处查看更多详细信息。
另一个选择是jstl的 <c:import> 标记为 <c:param> (比jsp更灵活,包括:

<c:import url="yourFragment.jsp">
  <c:param name="formName" value="repCertificateEntityForm" />
</c:import>

请在此处查看更多详细信息。
或者,可以使用jsp标记文件。

<h:yourTag formName="repCertificateEntityForm" />

请在此处查看更多详细信息。
注意,我上面的例子只是,例子,所以我用 repCertificateEntityForm 作为窗体的名称。在代码中使用 <jsp:include> , repCertificateEntityForm 是一个具有属性的对象,您正在尝试检索这些属性。但参数只能是字符串,因此很可能会出现以下异常:
javax.el.propertynotfoundexception:在类型java.lang.string上找不到属性“controllermodel”
或者类似的东西。
您正在测试一个窗体类型,如 ADD ,因此您可以在第一个jsp中这样更改代码:

<jsp:include page="config.jsp">
  <jsp:param name="formType" value="${repCertificateEntityForm.controllerModel.formType}" />
</jsp:include>

然后,在config.jsp中,可以使用以下工具进行测试:

<c:if test="${param.formType == 'ADD'}">

需要注意的另一点是,包含的jsp与当前jsp包含在同一上下文中,因此它可以访问范围属性,例如请求属性。如果你的 repCertificateEntityForm 在范围中添加了 request.setAttribute("repCertificateEntityForm", form); 然后config.jsp可以直接访问它,因为它将在作用域中。在这种情况下,您可以将第一个jsp更改为只包含以下内容:

<jsp:include page="config.jsp" />

在config.jsp中,您可以检索整个表单对象,并保持测试如下:

<c:if test="${repCertificateEntityForm.controllerModel.formType == 'ADD'}">

最后,我强烈建议您阅读一些教程或文档,以便更好地了解应用程序中的工作方式。

相关问题