Spring MVC с усами, отправляющими строковую переменную.

#javascript #java #spring #model-view-controller #mustache

#javascript #java #весна #модель-представление-контроллер #усы

Вопрос:

Я пытаюсь передать строковое значение для использования в моем js-скрипте для определения того, какой URL-адрес я должен отображать. Я попробовал несколько вещей, но я чувствую, что есть небольшая разница в том, как я передаю значение в js из java.

Итак, это мое сопоставление запросов, которое я использую для отправки значения в js из java.

   @RequestMapping(value = HOME_URL_MAPPING)
public String inventory(final Model model) {

    String userRole = "HQ";

    model.addAttribute("userrole", userRole);
    return controllerHelper.createUrl(INVENTORY, WebGlobals.HOME);
}
  

Это HTML-файл, который я использую для построения представления;

 {{>partials/header}}

 <script type="text/javascript">
 //var gus = $("userrole").val(); // undefined
 //var gus = '${userrole}'; //Returns ${userrole}
 //var gus = $('userrole').val(); //This get undefined?
 //var gus = $('userrole'); //This returns [object Object]
 //var gus = ${'userrole'}; //Dont work
 //var gus = ${userrole}; // Dont work
 //var gus = ${userrole}  Dont Work
 //var gusRole = ${userrole.name} Dont work
 //var gus = {{userrole}} //undeefined
//var gus = {{userrole}}; //undefined
var gus1 = "HQ"

var haveClicked = false; 
var myRole = "ADMIN"


 function checkUserRights()
 {
     alert("The Ships Going down all on account of the weather");
     alert(gus); //Prints off the value of Gus which will be the role of the user

if(haveClicked == false)
    {
        switch(myRole) // I want to put gus here to test
        {
            case "ADMIN":
                alert("Opening ADMIN Rights");
                $('<a href="/inventory/view"> H Group</a>').appendTo($('body'));
                $('<a href="/inventory/approve"> A Group</a>').appendTo($('body'));
                haveClicked = true;
                break;
            case "HQ":
                alert("Opening H Rights");
                $('<a href="/inventory/view"> H Group</a>').appendTo($('body'));
                haveClicked = true;
                break;
            default: 
                alert("Opening A Rights");
                $('<a href="/inventory/approve"> A Group</a>').appendTo($('body'));
                haveClicked = true; 
        }
}//end of if checker
  

}

  {{>partials/footer}}
  

И это мой помощник по управлению.

 @Component
public class ControllerHelper {
private static final Logger logger =       LoggerFactory.getLogger(ControllerHelper.class);

private final MessageSource messages;
private final String version;

@Autowired
public ControllerHelper(
        final MessageSource messages,
        @Value("${version}") final String version)
{
    this.messages = Validate.notNull(messages);
    this.version = Validate.notBlank(version);
}

public String getVersion() {
    return StringUtils.stripToEmpty(version);
}

public void addCommonAttributes(final Model model) {
    if (model == null) return;
    model.addAttribute("version", getVersion());
}

public String getMessage(final String code, final String defaultMessage) {
    return messages.getMessage(code, null, defaultMessage, getLocale());
}

public String getMessage(final String code, final Object[] args, final String defaultMessage) {
    return messages.getMessage(code, args, defaultMessage, getLocale());
}

public static Locale getLocale() {
    return Globals.DEFAULT_LOCALE;
}

public static String getCurrentUserName() {
    final Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    if (auth == null) return "anonymous";
    return auth.getName();
}

public static ResponseEntity<Map<String, Object>> displayErrorResponse(final Exception exception) {
    String errorMessage = exception.getMessage();

    if (exception.getClass() == InvalidUserInputException.class) {
        logger.info("USER ERROR: "   errorMessage);
    }
    else {
        logger.error("ERROR: "   errorMessage);
    }

    final Map<String, Object> error = new HashMap<>();
    error.put("error", errorMessage);       

    ResponseStatus exceptionResponseStatus = exception.getClass().getAnnotation(ResponseStatus.class);

    // Set as bad request if no response status set for exception
    return ResponseEntity.status(exceptionResponseStatus == null ? HttpStatus.INTERNAL_SERVER_ERROR : exceptionResponseStatus.value()).body(error);
}

public String createUrl(String... pathElements) {
    int numberOfPathElements = pathElements.length;
    if (numberOfPathElements == 0) return "";

    String result = pathElements[0];
    for (int iter = 1; iter < numberOfPathElements; iter  ) {
        result  = "/"   pathElements[iter];
    }

    return resu<
}
  

}

Комментарии:

1. Как насчет просто: var gus = '{{userrole}}' ; ?

2. @marioosh, это сработало, большое вам спасибо. Пожалуйста, укажите это как ответ, и я приму его. Еще раз спасибо.

Ответ №1:

Попробуйте это

 var gus = '{{userrole}}';