com.alibaba.citrus.service.pipeline.PipelineException
Failed to invoke Valve[#2/3, level 3]: com.alibaba.citrus.turbine.pipeline.valve.PerformTemplateScreenValve#a28815:PerformTemplateScreenValve
caused by com.alibaba.citrus.service.mappingrule.MappingRuleException
com.alibaba.citrus.service.moduleloader.UnadaptableModuleException: Could not adapt object to module: type=screen, name=ViewUser, class=class com.alibaba.webx.tutorial1.register.module.screen.ViewUser
caused by com.alibaba.citrus.service.moduleloader.UnadaptableModuleException
Could not adapt object to module: type=screen, name=ViewUser, class=class com.alibaba.webx.tutorial1.register.module.screen.ViewUser
Exception Occurred
com.alibaba.citrus.service.pipeline.PipelineException
Failed to invoke Valve[#2/3, level 3]: com.alibaba.citrus.turbine.pipeline.valve.PerformTemplateScreenValve#287ca7:PerformTemplateScreenValve
caused by com.alibaba.citrus.webx.WebxException
Failed to execute screen: ViewUser
caused by java.lang.NullPointerException
No Message
Exception Occurred
com.alibaba.citrus.service.pipeline.PipelineException
Failed to invoke Valve[#2/2, level 3]: com.alibaba.citrus.turbine.pipeline.valve.PerformScreenValve#2c390c:PerformScreenValve
caused by com.alibaba.citrus.webx.WebxException
Failed to load screen module: Register
caused by com.alibaba.citrus.service.moduleloader.ModuleNotFoundException
Could not find screen module: Register
支持模板 |
$control.setTemplate("myControl.vm") |
无模板 |
$control.setModule("myControl") |
<loop> <choose> <when> <!-- 执行带模板的screen,默认有layout。 --> <pl-conditions:target-extension-condition extension="null, vm, jsp" /> <performAction /> <performTemplateScreen /> <renderTemplate /> </when> <when> <!-- 执行不带模板的screen,默认无layout。 --> <pl-conditions:target-extension-condition extension="do" /> <performAction /> <performScreen /> </when> <otherwise> <!-- 将控制交还给servlet engine。 --> <exit /> </otherwise> </choose> <!-- 假如rundata.setRedirectTarget()内部重定向,被设置,则循环,否则退出循环。 --> <breakUnlessTargetRedirected /> </loop>
<img src="$workshopContent.setContentPath("images/logo_webx.png")"/>
public static void main(String[] args) throws Exception {
Server server = new Server();
SelectChannelConnector connector = new SelectChannelConnector();
connector.setPort(80);
server.addConnector(connector);
WebAppContext context = new WebAppContext();
context.setContextPath("/");
context.setDescriptor("src/main/webapp/WEB-INF/web.xml");
context.setResourceBase("src/main/webapp");//这里设置了基本路径
server.setHandler(context);
server.start();
}
onclick="location='$workshopModule.setTarget("modifyUser.vm").addQueryData("id", $user.id)'"/>
Map params = ArrayUtil.toMap(new String[][] { { "id", userId } }); group.getField("error").setMessage("wrongIdOrPassword", params);
Pull服务的设置:请注意,UserAuth对象应该是global作用域的 —— 因为它的所有方法都是static的,没有必要在每个请求中都创建该对象。这样,模板就可以访问$userAuth对象了。
<services:pull xmlns="http://www.alibaba.com/schema/services/pull/factories">
<utils />
<rundata-tool />
<csrfToken />
<form-tool />
<control-tool />
<uris-tool />
<pull-factories:bean-tool id="userAuth" scope="global"
class="com.alibaba.webx.tutorial1.util.UserAuth"/>
</services:pull>
package com.alibaba.webx.tutorial1.util; import com.alibaba.webx.tutorial1.register.SiteUser; public class UserAuth { private static final ThreadLocal<SiteUser> userHolder = new ThreadLocal<SiteUser>(); public static void setLoginUser(SiteUser user) { userHolder.set(user); } public static SiteUser getLoginUser() { return (SiteUser) userHolder.get(); } public static boolean isLoggedIn() { return getLoginUser() != null; } }
package com.alibaba.webx.tutorial1.util; import static com.alibaba.citrus.turbine.util.TurbineUtil.getTurbineRunData; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import com.alibaba.citrus.service.pipeline.PipelineContext; import com.alibaba.citrus.service.pipeline.support.AbstractValve; import com.alibaba.citrus.turbine.TurbineRunData; import com.alibaba.webx.tutorial1.register.SiteUser; public class UserAuthValve extends AbstractValve { @Autowired private HttpServletRequest request; private String action; public void setAction(String action) { this.action = action; } public void invoke(PipelineContext pipelineContext) throws Exception { TurbineRunData rundata = getTurbineRunData(request); if (!"cleanup".equals(action)) { SiteUser user = (SiteUser) rundata.getRequest().getAttribute("loginUser"); if (user != null) { UserAuth.setLoginUser(user); System.out.print("设置了user"); } } else { UserAuth.setLoginUser(null); System.out.print("user为空"); } pipelineContext.invokeNext(); } }
#if ($userAuth.loggedIn) <p>你好,$userAuth.loginUser.name</p> #else <p>你好,世界!</p> #end
<services:components > <services:component name="register" path="/register"></services:component> <services:component name="app1" path="/app1"></services:component> </services:components>
这样将就可以访问register模块了,url为:http://localhost:80/register/xxx.htm