return "user/userTariffs";
Означает отправить user на эту страницу, Вы делаете ajax запрос и контроллер ни на какую страницу юзера не отправляет. Для того, чтобы информация обновилась на странице, как Вы хотите, Вам нужно эту информацию передать из контроллера на сервере в браузер клиента в респонсе, аннотация @ResponseBody и на клиенте использую js обновить html страницу.@RequestMapping(value = "/userChangeTariff", method = RequestMethod.POST)
@ResponseBody
public Integer changeTariff(HttpServletRequest req,
@RequestParam(value = "sum") Integer sum) {
final Integer newSum = new Integer(sum+1);
req.getSession().setAttribute("userPayment", );
return newSum;
}
<div class="popover-content">
<div class="list-group">
<a href="userTariffs" class="list-group-item">
<h4 class="list-group-item-heading text-overflow">
<i class="fa fa-fw fa-envelope"></i> My scope
</h4>
<p class="list-group-item-text text-overflow">I spend <span id="user_payment_sum">${userPayment}</span> RUB per month</p>
</a>
</div>
<div style="padding:10px"><a class="btn btn-success btn-block" href="userTariffs">Show me
more...</a></div>
</div>
function popBox() {
x = confirm('Are you sure? ');
if (x == true) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
alert(xhr.responseText); //TODO test alert
document.getElementById('user_payment_sum').innerHTML =xhr.responseText;
}
}
xhr.open("POST", "userChangeTariff?sum=" + par1, false);
xhr.send();
<span id="user_payment_sum">
, в которой лежат те данные, которые мы хотим динамически менять по ajax запросу на сервер и секцию if (xhr.readyState == XMLHttpRequest.DONE) {
, которая ожидает ответ и выполняет некие действия, когда приходит респонс.List<User> users
тутString output = null;
String URLstring = "http://localhost:8080/getRestInfo?contract=base";
URL url = new URL(URLstring);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("Authorization", "Basic " +
new String(new Base64().encodeBase64("b@b.ru:12345".getBytes())));
if (conn.getResponseCode() != 200) {
System.out.println("Failed : HTTP error code : "
+ conn.getResponseCode());
System.exit(1);
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
output = br.readLine();
/**
* Здесь в output переменной у Вас в output лежит json, чтобы преобразовать его в java бины нужен парсер (это называется десериализовать), наиболее популярные - Gson или Jackson
*/
Gson gson = new Gson();
Type userListType = new TypeToken<ArrayList<User>>() {}.getType();
List<User> users = gson.fromJson(output, userListType);
conn.disconnect();
System.out.println(output);
<html>
<head>
<meta name="_csrf" content="${_csrf.token}"/>
<meta name="_csrf_header" content="${_csrf.headerName}"/>
...
</head>
...
</html>
var csrfHeaderName = "X-CSRF-TOKEN";
var csrfTokenValue;
var metaTags = document.getElementsByTagName('meta');
for(var i = 0; i < metaTags.length; i++) {
var metaTagName = metaTags[i].getAttribute("name");
if(metaTagName === "_csrf_header")
csrfHeaderName = metaTags[i].getAttribute("content");
if(metaTagName === "_csrf")
csrfTokenValue = metaTags[i].getAttribute("content");
}
...
var xhr = new XMLHttpRequest();
xhr.open("POST", "userChangeTariff?tariffId=" + num1 + "&contractNumber=" + num2, false);
xhr.setRequestHeader(csrfHeaderName, csrfTokenValue);
xhr.send();
@RequestMapping(value = "/adminNewClient", method = RequestMethod.DELETE)
public @ResponseBody Map adminNewClientPost(HttpServletResponse response, HttpServletRequest request,
@RequestParam(value = "name") String name,
@RequestParam(value = "surName") String secondName,
@RequestParam(value = "birthday") String birthdayDate,
@RequestParam(value = "passport") String passport,
@RequestParam(value = "adress") String adress,
@RequestParam(value = "email") String eMail,
@RequestParam(value = "number") String number) {
LinkedHashMap result = new LinkedHashMap();
result.put("nameStat","YES!");
return result;
}
<tr>
<td><input id="surName" type="text" class="form-control" placeholder="Surname"></td>
<td><span style="color:blue;" id="nameStat">${nameStat}</span></td>
</tr>
function popBox() {
x = confirm('Are you sure? ');
if (x == true) {
var xhr = new XMLHttpRequest();
xhr.onload = function(){
var jsonResponse = JSON.parse(this.responseText);
for(var index in jsonResponse) {
if (jsonResponse.hasOwnProperty(index)) {
document.getElementById(index).innerText = jsonResponse[index];
}
}
};
xhr.open("DELETE", "adminNewClient?name=" + name + "&surName=" + surName
+ "&birthday=" + birthday + "&passport=" + passport
+ "&adress=" + adress + "&email=" + email + "&number=" + number, false);
xhr.send();
}
}
public ResponseEntity<?> userNumberOperationsDelete(HttpServletRequest req, HttpServletResponse resp, Locale locale, Model model,
@RequestParam(value = "number") String number,
@RequestParam(value = "status") String status) {
...
} else {
return new ResponseEntity<>(errorMessage, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
return new ResponseEntity<>(HttpStatus.OK);
}
Или у меня чрезмерно идеалистические представления о роли архитекторов в разработке?
включая "подводные камни", которые, как правило, доступны только прилично поработавшим с технологией специалистам?
Опять же, отрасль очень бурная - когда успевать работать и следить за всем, что в ней происходит?
<input type="hidden" name="tariffId" value="${tempId.add(tariff.tariffId)}">
<script>
var tariffID = "${tempId.add(tariff.tariffId)}";
</script>
<script>
var array = new Array();
<c:forEach var="tariff" items="${allTariffs}" varStatus="loop">
array.push('${tempId.add(tariff.tariffId)}');
</c:forEach>
</script>
NOTE: I noticed that some of the readers are getting database connection issues. Notice that in my pom.xml, there is no database driver. That works for me because I have MySQL driver in tomcat lib directory and some DataSource connections configured with it. For any database connection related issues, either put the database driver in container lib or include that in pom.xml dependencies.
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.4</version>
</dependency>
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/ping", "/users/**")
.permitAll()
.anyRequest()
.hasRole("USER");
}