Dorado 5 : 6.6.在JSP的Scriptlet中使用ViewModel (RF1)

除了在视图模型实现类以及Dorado的Mapping控制器中可以获得并且操作ViewModel对象外,在Jsp页面中也可以对页面对应的ViewModel进行操作控制。
在Jsp页面中<d:View>标签之后,通过一下代码可以获取页面的ViewModel对象:

<%ViewModel viewModel = JspHelper.getViewModel(pageContext);%>

注意以上代码必须得在<d:View>标签之后使用。这样可以确保dorado根据<d:View>先创建好ViewModel对象,再通过JspHelper对象获得。
获取ViewModel对象之后就可以使用ViewModel提供的方法对其进行控制。
例如一个Dorado页面上有一个DataTable和一个Button,需要根据request中的role的值来设定button可见或者不可见,页面代码如下:

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://www.bstek.com/dorado" prefix="d" %>
<html>
<head><title></title></head>
<body>
<d:View config="sample.Employee">
<d:DataTable id="table1" />
<d:Button id="button1" />
</d:View>
</body>
</html>

可以在页面中嵌入一下代码完成按钮的动态显示:

<%
ViewModel viewModel = JspHelper.getViewModel(pageContext);
String role = request.getParameter("role");
if("roleA".equals(role)){
Button button = (Button)viewModel.getControl("button1");
button.setDisabled(true);
}
%>

当角色为roleA时将按钮设置为禁用。完整的页面代码如下:

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://www.bstek.com/dorado" prefix="d" %>
<%@ page import="com.bstek.dorado.view.*" %>
<%@ page import=" com.bstek.dorado.view.control.Button" %>
<html>
<head><title></title></head>
<body>
<d:View config="sample.Employee">
<%
ViewModel viewModel = JspHelper.getViewModel(pageContext);
String role = request.getParameter("role");
if("roleA".equals(role)){
Button button = (Button)viewModel.getControl("button1");
button.setDisabled(true);
}
%>
<d:DataTable id="table1" />
<d:Button id="button1" />
</d:View>
</body>
</html>

在jsp中使用ViewModel对象时需要将相关的dorado类引入。