我正在使用liferay来开发自定义portlet(mvc portlet)我的问题是我在HTML中的jsp页面中有一个表单,而我想要的是验证表单的某些字段。在提交按钮上它重定向到另一个页面。我已经完成的验证工作正在发生,但是当点击提交按钮时,它会重定向到另一个页面,在该页面上它只是显示来自liferay的默认错误。我想要的是,如果请求没有完成,并且在验证错误的字段附近显示错误消息,则显示相同的页面。
我该如何解决这个问题?
这是我在动作类
中添加方法时检查验证的代码public void addRestaurant(ActionRequest request,ActionResponse response){
log.info("Inside addRegistration");
List<String> errors = new ArrayList<String>();
restaurant rest = RestaurantActionUtil
.getRestaurantFromRequest(request);
boolean restValid = RestaurantValidator
.validateRestaurant(rest, errors);
if (restValid) {
try {
log.info(rest);
restaurant test = restaurantLocalServiceUtil
.addrestaurant(rest);
if (test == null) {
log.error("Restaurant was Found Null");
response.setRenderParameter("jspPage", errorJSP);
return;
}
} catch (SystemException e) {
log.error(e);
/*
* If there is an error then divert the control to the error
* page.
*/
response.setRenderParameter("jspPage", errorJSP);
return;
}
SessionMessages.add(request, "restaurant-added");
return;
} else {
for (String error : errors) {
SessionErrors.add(request, error);
}
SessionErrors.add(request, "error-while-adding");
request.setAttribute("rest", rest);
return;
}
}
这是我的验证员类
公共类RestaurantValidator {
public static boolean validateRestaurant(餐厅休息,列出错误){
boolean valid=true ;
if (Validator.isNull(rest.getName())) {
errors.add("Name-required");
valid = false;
}
if (Validator.isNull(rest.getLicensekey())) {
errors.add("license-key-required");
valid = false;
}
以下是我的view.jsp代码
餐厅名称* “/&gt;
<span class="help-block">help block</span>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<label>License Key<span class="f_req">*</span></label>
<liferay-ui:error key="license-key-required" message="license-key-required" />
<input type="text" name="licensekey" class="span8" value="<%=restaurantOBJ.getLicensekey() %>"/>
</div>
</div>
错误消息是在重定向页面上使用以下方式显示,而不是在同一页面上我想要名称的文本框附近的错误,错误为“Name_required”
错误消息在重定向页面上以下列方式显示,而不是在同一页面上,我想在name-textbox附近发生错误,错误为“Name_required”。
我想要的是当名称为空时,它不应该提交表单并在view.jsp
页面中的名称文本框附近给出错误。
答案 0 :(得分:0)
我会尝试回答您的问题,如果验证失败,请尝试在actionResponse.setRenderParameter("valid", "NO");
方法中设置addRestaurant
。
在doView
方法中获取此参数,并在此方法中相应地设置renderPage
:include(renderPage, renderRequest, renderResponse);
方法末尾的doView
。
如果你可以提供问题中的所有信息,例如验证方法,<aui:form>
以及onSubmit
上调用的javascript方法,那么我们可以继续寻找其他解决方案。
同时你可以试一试,看看它是否有效。 : - )