小编Dea*_*ive的帖子

使用Jetty以编程方式部署servlet

我有一个servlet,我希望使用Jetty以编程方式部署.servlet使用Spring,它的web.xml指向Spring上下文XML文件,正如您所期望的那样.

目前,我只是尝试Jetty文档中的示例代码,但使用自己的servlet:

Server server = new Server(8080);

ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);

context.addServlet(new ServletHolder(new BatchReceiver()),"/br/*");

server.start();
server.join();
Run Code Online (Sandbox Code Playgroud)

这导致以下异常:

2012-05-24 14:43:20.190:INFO:oejs.Server:jetty-8.1.3.v20120416
2012-05-24 14:43:20.266:WARN:/:unavailable
java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
at org.springframework.web.context.support.WebApplicationContextUtils.getRequiredWebApplicationContext(WebApplicationContextUtils.java:84)
at com.spiffymap.sealog.server.servlet.BatchReceiver.init(BatchReceiver.java:126)
at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:492)
at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:312)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:778)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:258)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:699)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:90)
at org.eclipse.jetty.server.Server.doStart(Server.java:262)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at com.spiffymap.sealog.server.servlet.TestBatchReceiver.main(TestBatchReceiver.java:26)
2012-05-24 14:43:20.335:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080
Run Code Online (Sandbox Code Playgroud)

如何设置我的servlet以便Jetty知道它的web.xml和Spring上下文在哪里?

真的很感激任何帮助!

编辑

所以,显然我不需要web.xml但我确实需要将Jetty指向我的Spring上下文.我尝试过以下内容:

context.setInitParameter("contextConfigLocation", "classpath*:**/*Context.xml");
Run Code Online (Sandbox Code Playgroud)

但它不起作用(仍然产生相同的例外).我也尝试在ServletHolder上设置"contextConfigLocation"无济于事.

spring servlets jetty context.xml

11
推荐指数
1
解决办法
1万
查看次数

将GWT小部件插入到div元素中

我正在使用GWT库(gwt-openlayers),它允许我创建一个包含任意HTML的地图弹出窗口,类似于谷歌地图.我需要这个HTML来包含一个GWT Button小部件.

我正在创建一些HTML元素,如下所示:

Element outerDiv = DOM.createDiv();
outerDiv.getStyle().setOverflow(Overflow.HIDDEN);
outerDiv.getStyle().setWidth(100, Unit.PCT);
outerDiv.appendChild(new HTML(mapPOI.getHtmlDetails()).getElement());
Button popupButton = new Button("View Property");
popupButton.getElement().getStyle().setFloat(com.google.gwt.dom.client.Style.Float.RIGHT);
outerDiv.appendChild(popupButton.getElement());
Run Code Online (Sandbox Code Playgroud)

然后我通过调用获取这些元素的源HTML

String src = outerDiv.toString();
Run Code Online (Sandbox Code Playgroud)

并将此html插入我的地图标记.现在我的地图标记显示内容确定,包括按钮.但是,该按钮不会响应任何事件!从我可以收集到的,这是因为从未调用onAttach()方法按钮.

有一个更好的方法吗?

谢谢,

乔恩

~~~~编辑~~~~

我现在正在尝试一种新方法,这似乎是接受其他类似帖子的公认方法.

首先,我正在创建我的div:

String divId = "popup-" + ref;
String innerHTML = "<div id=\"" +divId + "\"></div>";
Run Code Online (Sandbox Code Playgroud)

然后我将它添加到我的地图弹出窗口并显示它(将其添加到DOM).显示弹出窗口后,我按如下方式获取Element,并尝试在其周围包装HTMLPanel:

Element element = Document.get().getElementById(divId);
HTMLPanel popupHTML = HTMLPanel.wrap(element);
Run Code Online (Sandbox Code Playgroud)

我的div元素已成功检索.但是,HTMLPanel.wrap(element);没有完成.原因是wrap(..)调用RootPanel.detachOnWindowClose(Widget widget),包括以下断言:

assert !widgetsToDetach.contains(widget) : "detachOnUnload() called twice "
    + "for the same widget";
assert !isElementChildOfWidget(widget.getElement()) : "A widget …
Run Code Online (Sandbox Code Playgroud)

html gwt

6
推荐指数
1
解决办法
1万
查看次数

测试 Angular Material 表正在呈现正确的数据

我正在使用 Angular Material 表来显示用户列表,包括电子邮件、创建日期和角色。我的模板如下所示:

<table mat-table [dataSource]="dataSource" multiTemplateDataRows matSort matSortActive="email" matSortDirection="asc">
  <ng-container matColumnDef="email">
    <th mat-header-cell *matHeaderCellDef mat-sort-header>Email</th>
    <td mat-cell *matCellDef="let user" class="user-email"><a [routerLink]="['/users', user.id]">{{user.email}}</a></td>
  </ng-container>

  <ng-container matColumnDef="created">
    <th mat-header-cell *matHeaderCellDef mat-sort-header>Created</th>
    <td mat-cell *matCellDef="let user">{{user.created | date: 'medium'}}</td>
  </ng-container>

  <ng-container matColumnDef="roles">
    <th mat-header-cell *matHeaderCellDef mat-sort-header>Roles</th>
    <td mat-cell *matCellDef="let user">{{user.roles.join(', ')}}</td>
  </ng-container>

  <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
  <tr mat-row *matRowDef="let user; columns: displayedColumns;"
      class="user-row">
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

我有单元测试来确定数据是否加载到组件中,但是我还想测试数据是否在模板中正确呈现。为此,我尝试使用以下测试代码:

it('should display the users email', () => {
  expect(component.users).toBe(testUsers);

  fixture.detectChanges();
  console.log(fixture.isStable()); // displays false
  fixture.whenRenderingDone().then(() => …
Run Code Online (Sandbox Code Playgroud)

unit-testing angular-material angular

5
推荐指数
1
解决办法
1万
查看次数

在 Angular 6 组件 ngOnInit 函数中测试 rxjs 间隔

我有一个具有以下 ngOnInit 函数的组件,该函数轮询服务方法以获取状态更新:

ngOnInit() {
  interval(2000).pipe(
    switchMap(() => this.dataService.getStatus())
  ).subscribe((result) => {
    this.uploadStatus = result;
  );
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用以下代码测试更新是否实际发生:

beforeEach(() => {
  fixture = TestBed.createComponent(UploadComponent);
  component = fixture.componentInstance;
  fixture.detectChanges();
});


it('should start checking for status updates', fakeAsync(() => {
  const dataService = TestBed.get(DataService);
  // Mock the getStatus function
  spyOn(dataService, 'getStatus').and.returnValue(Observable.create().pipe(map(() => 'woo')));
  // Should not be initialised yet
  expect(component.uploadStatus).toBeUndefined();
  tick(2000);
  expect(component.uploadStatus).toBe('woo');
}));
Run Code Online (Sandbox Code Playgroud)

component.uploadStatus始终为空。我应该如何测试这种类型的场景?理想情况下,我想随着时间的推移检查多次更新。

谢谢

unit-testing jasmine rxjs angular

3
推荐指数
1
解决办法
6804
查看次数