У меня есть приложение на основе Spring, которое использует websocket, stomp.js и JPA для сохранения. ниже приведена конфигурация для веб-сокета
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
// TODO Auto-generated method stub
stompEndpointRegistry.addEndpoint("/ws").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
}
и контроллер
@Controller
public class HomeController {
@Autowired private StockService<Stock> stockService;
@Autowired private SimpMessagingTemplate template;
private void updatePriceAndBroadcast() {
template.convertAndSend("/topic/price", stockService.getAll());
}
@MessageMapping("/addStock")
public void addStock(Stock stock) throws Exception {
stockService.save(stock);
updatePriceAndBroadcast();
}
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home() {
updatePriceAndBroadcast();
return "home";
}
}
просмотреть как home.jsp
<html>
<head>
<title>Real time notify example</title>
</head>
<body>
<h1>Real time notify example</h1>
<table>
<thead><tr><th>Code</th><th>Price</th><th>Time</th></tr></thead>
<tbody id="price"></tbody>
</table>
<p class="new">
Code: <input type="text" class="code"/>
Price: <input type="text" class="price"/>
<button class="add">Add</button>
<button class="remove-all">Remove All</button>
</p>
<script src="http://cdn.sockjs.org/sockjs-0.3.min.js"></script>
<script src="/notify/resources/stomp.js"></script>
<script src="https://code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
//Create stomp client over sockJS protocol
var socket = new SockJS("/notify/ws");
var stompClient = Stomp.over(socket);
// Callback function to be called when stomp client is connected to server
var connectCallback = function() {
stompClient.subscribe('/topic/price', renderPrice);
};
// Callback function to be called when stomp client could not connect to server
var errorCallback = function(error) {
alert(error.headers.message);
};
// Connect to server via websocket
stompClient.connect("guest", "guest", connectCallback, errorCallback);
// Register handler for add button
$(document).ready(function() {
$('.add').click(function(e){
e.preventDefault();
var code = $('.new .code').val();
var price = Number($('.new .price').val());
var jsonstr = JSON.stringify({ 'code': code, 'price': price });
stompClient.send("/app/addStock", {}, jsonstr);
return false;
});
});
// Register handler for remove all button
$(document).ready(function() {
$('.remove-all').click(function(e) {
e.preventDefault();
stompClient.send("/app/removeAllStocks");
return false;
});
});
</script>
</body>
</html>
Когда я ударил
<button class="add">Add</button>
Я получаю список добавленных элементов, но когда я обновляю страницу или открываю новую страницу, я не вижу списка добавленных элементов. Может ли кто-нибудь сказать мне, где внести изменения, чтобы я получил список добавленных/сохраненных элементов даже после обновление страницы или открытие нового экземпляра браузера.
Приложение доступно по адресу realtimetest.