@GetMapping("/banking/stocks")
public String stocks(Model model) {
model.addAttribute("stock", new StockDto());
try {
List<Stock> stocks = stockService.getDefaultStocks();
model.addAttribute("stocks", stocks);
} catch (IOException e) {
e.printStackTrace();
}
return "stocks.html";
}
@Service
public class StockServiceImpl implements StockService {
private String[] startingStocks = { "AAPL", "BABA", "MSFT", "AXP", "BA", "AMD", "TSLA", "MA", "SHOP", "GOOGL",
"KL" };
@Override
public Stock getStock(String stockName) throws IOException {
Stock stock = YahooFinance.get(stockName);
return stock;
}
@Override
public Map<String, Stock> getStock(String[] s) throws IOException {
Map<String, Stock> stocks = YahooFinance.get(s);
return stocks;
}
@Override
public List<Stock> getDefaultStocks() throws IOException {
Map<String, Stock> stocks = YahooFinance.get(startingStocks);
List<Stock> stockList = new ArrayList<Stock>();
for(String s : startingStocks) {
stockList.add(stocks.get(s));
}
return stockList;
}
}
用于显示股票的HTML页面:
<main class='main-content bgc-grey-100'>
<div id='mainContent'>
<div class="container-fluid">
<br>
<h4 class="c-grey-900 mT-10 mB-30">Stock Table</h4>
<form action="#" th:object="${stock}" th:action="@{/banking/stock-search}"
method="POST" class="form-inline my-2 my-lg-0">
<input class="form-control mr-sm-2" type="search"
th:field="*{name}" placeholder="Search Stock"
aria-label="Search">
<button class="btn btn-outline-primary my-2 my-sm-0" type="submit">Search</button>
</form>
<br>
<div class="row">
<div class="col-md-12">
<div class="bgc-white bd bdrs-3 p-20 mB-20">
<table id="dataTable" class="table table-striped table-bordered"
cellspacing="0" width="100%">
<thead>
<tr>
<th>Ticker</th>
<th>Trade</th>
<th>Name</th>
<th>Price</th>
<th>(%) Change</th>
<th>Div Yield (%)</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Ticker</th>
<th>Trade</th>
<th>Name</th>
<th>Price</th>
<th>(%) Change</th>
<th>Div Yield (%)</th>
</tr>
</tfoot>
<tbody>
<tr th:each="stock : ${stocks}">
<td th:text="${stock.getSymbol()}"></td>
<td>
<form action="#" th:action="@{/banking/stocks/} + ${stock.symbol}" method="get">
<button class="btn btn-outline-success my-2 my-sm-0" th:id="'table_entry_childs_button_' + ${stock.symbol}" type="submit">
<i>Trade</i>
</button>
</form>
</td>
<td th:text="${stock.getName()}"></td>
<td th:text="${stock.getQuote().getPrice()}"></td>
<td th:class="${stock.getQuote().getChangeInPercent() > 0 ? 'text-success' : 'text-danger'}" th:text="${stock.getQuote().getChangeInPercent() + '%'} "></td>
<td th:if="${stock.getDividend().getAnnualYield() != null}" th:text="${stock.getDividend().getAnnualYield() + '%'}">0.00%</td>
<td th:if="${stock.getDividend().getAnnualYield() == null}" >0.00%</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</main>
您可以使用spring Boot来利用STOMP协议和web套接字。供参考:https://www.baeldung.com/spring-websockets-send-message-to-user
在后端,您可以使用
@Autowired
SimpMessagingTemplate messagetemplate;
public void somemethod(String strParam){
while (true){
// build string or json whatever you need to send
messagetemplate.convertAndSend("/blabla/blabla",strParam);
Thread.sleep(30*1000);
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.js">
<script type="text/javascript">
function load(){
var stompClient = Stomp.client("ws://localhost:8080/ws");
stompClient.connect({}, function (frame) {
stompClient.subscribe('/blabla/blabla', function (message) {
// do something here
});
});
}
<html>
<body onload="load()">
</body>
</html>
【参数】 子链刷新的参数在subchainbase.sol中定义。参数列表如下: 1.刷新周期Round数值:定义子链经过多少区块后刷新。假如子链有100个节点,每个节点依次产生block,定义Round数为5,则每过500block 刷新一次。 2.当前刷新id 索引:指定下次刷新的id 在Nodelist中 的索引值 3.刷新过期数值expiration:指定的id在block [0, 2*e
我有一个应用程序,它从一个流接收大部分输入,但是它的一些数据来自RDBMS和一系列静态文件。 流将连续发出事件,因此flink作业永远不会结束,但是如何定期刷新RDBMS数据和静态文件以捕获对这些源的任何更新? 我目前正在使用从数据库中读取数据。 下面是我尝试做的大致示意图:
在SpringJSFWeb应用程序中将Netty客户端处理程序配置为消息接收点,有没有具体的方法? 如果一些独立的Java应用程序充当Netty服务器,我如何接收到SpringJSFWeb应用程序的消息?
让我们看看同步方法MyClientFacade.getUser(): 如果使用或混合使用,则获得相同的行为: 假设我的用户在缓存中的得分值是5,而Firebase DB的得分值是11。 如果取消示例中代码的注释,Firebase缓存将有足够的时间更新,并且我的将返回正确的得分值(11)。 那么如何直接从服务器端直接询问最新的值并绕过缓存呢?
我有这个应用程序工作在一个标准的LAMP堆栈,但当我试图运行它在docker nginx php-fpm我得到一个错误(使用richarove/nginx-php-fpm. docker容器)。 编辑:此容器在同一容器中运行nginx和php fpm。 http://ip-vm/sistema/index.php/gui/gui/login 这是标准输出错误: 2016/04/13 23:23:1
我理解客户机应用程序使用refresh_token(连同它的凭据)为最终用户(资源所有者)获取新的访问令牌,而不是存储最终用户的用户名/密码,并在每次access_token过期时发送它们。 然而,在我看来,这听起来像refresh_token和access_token一样好,它几乎只是一个额外的服务器调用,所以为什么不直接使用它,即如果refresh token是有效的授予访问权限呢?