我有这么个需求:希望能通过数据库配置来指定每个页面上的每个UI控件是否最终显示出来。表结构例如:
page | component_id | is_display
有什么办法能够加个拦截器之类的东西,在Struts渲染每个UI控件之前能执行这个拦截器,在拦截器里能取到当前被渲染的控件对象,并修改控件对象的属性吗?
我只知道Struts有Interceptor,但貌似只是拦截后台Action的,不知道是不是能处理UI控件。
请各路大神指导!
我有这么个需求:希望能通过数据库配置来指定每个页面上的每个UI控件是否最终显示出来。表结构例如:
page | component_id | is_display
有什么办法能够加个拦截器之类的东西,在Struts渲染每个UI控件之前能执行这个拦截器,在拦截器里能取到当前被渲染的控件对象,并修改控件对象的属性吗?
我只知道Struts有Interceptor,但貌似只是拦截后台Action的,不知道是不是能处理UI控件。
请各路大神指导!
以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
可以使用Interceptor进行拦截,但是你提到的is_display
字段并不能确定是否要显示某个UI控件,这取决于你的业务逻辑。
你可以使用一个过滤器(Filter)来检查is_display
字段,然后根据结果决定是否显示控件。示例代码如下:
public class DisplayFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
boolean isDisplay = getIsDisplay(request);
if (isDisplay) {
// 如果是显示,则调用渲染方法
chain.doFilter(request, response);
} else {
// 如果不是显示,则返回空响应
response.getWriter().write("");
}
}
private boolean getIsDisplay(ServletRequest request) {
// 根据请求参数获取isDisplay值
return false;
}
}
在这个例子中,getIsDisplay
方法可以根据不同的条件返回true或false。如果返回的是true,那么就继续传递给下一个过滤器;否则,返回null或者直接返回false。
注意:这个例子中的displayFilter
只用于演示如何使用Filter。实际应用中,你需要根据你的业务逻辑选择合适的过滤器和拦截器。