2012-03-06 3 views
2

나는 따옴표와 URL 태그를 사용하는 경우간단한 대 큰 따옴표 (1.2.4)

No route able to invoke action CONTROLLERNAME./public/images/blue.png was found 

모든 것을 작동하는 동안 코드에

@{'/public/images/blue.png'} 

어쩌면 봤는데 너무 많은 머리와 내가 보이지 않아요 멍청한 짓이있다 : 작은 따옴표를 사용하는 경우?

template tag documentation에서

않으며, @ template tag documentation에서 특히, 내가 단일 및 이중 따옴표의 다른 의미 론적 의미에 대한 언급을 볼 수 없었다 ... 끝내 따옴표로

templetable strings하지만 여전히이하지 않는 것 그것이 실패한 이유를 설명하고 그것이 알려진 행동 인 경우 문서에서 매우 크게 작성되어야합니다. 문제가 무엇인지 이해하는 데는 상당한 시간이 걸렸습니다!

답변

1

play.templates.GroovyTemplateCompiler를 제공하기위한 추적 방법이 있습니다 검사가 이루어집니다 "파일이"어떻게 #{script /} 태그

이있다 @{..}@@{..}을 실행 :

@Override 
void action(boolean absolute) { 
    String action = parser.getToken().trim(); 
    if (action.trim().matches("^'.*'$")) { 
     if (absolute) { 
      print("\tout.print(__reverseWithCheck_absolute_true("+action+"));"); 
     } else { 
      print("\tout.print(__reverseWithCheck_absolute_false("+action+"));"); 
     } 
    } else { 
     if (!action.endsWith(")")) { 
      action = action + "()"; 
     } 
     if (absolute) { 
      print("\tout.print(actionBridge._abs()." + action + ");"); 
     } else { 
      print("\tout.print(actionBridge." + action + ");"); 
     } 
    } 
    markLine(parser.getLine()); 
    println(); 
} 

action 문자열은 @{} 사이의 모든 문자입니다. @{..}을 사용하면 absolute이 false로 설정되어 호출됩니다. __reverseWithCheck_absolute_true/false은 템플릿을 찾는 데 필요한 메소드입니다. 그러나 액션이 정규식 "^'.*'$" (단일 qoutes 이외의 것을 사용하는 경우)과 일치하지 않으면 컨트롤러의 메서드로 action을 호출하려고 시도합니다.

컨트롤러 동작을 찾으려는 부분을 실제로 이해하지 못합니다. 그러나 오류를 던지고있는 부분이 무엇인지 생각합니다. actionBridgeActionBridge 클래스의 인스턴스입니다.

+0

당신이 그것을 못 박았습니다!템플릿 태그에 대해서는 "일반적인"것이 아니라 실제로 템플릿 태그가 구현되는 방식입니다. 템플릿 태그 구문 분석이 실제로 작동하는 방식을 한 번도 확인한 적이 없으며이 검색 결과에 조금 놀랐지 만 이것이 예외라고 생각합니다. 어쨌든,이 동작은 문서에서 확실히 설명해야합니다 !!! – Stefano

0

내가 아는 것처럼 @{} 사이에 전체 경로 문자열을 넣을 수 없으므로 전혀 작동하지 않아야합니다. 코드에 "/public/images/blue.png"을 직접 입력해야합니다.

@{}은 주어진 컨트롤러와 동작의 URL을 역방향으로 라우팅하는 데 사용됩니다.

그리고 파일이 있는지 실제로 확인하려면 자신의 태그가있을 수 있습니다.

프레임 워크/템플릿/태그/script.tag

%{ 
    (_arg) && (_src = _arg); 

    if (!_src) { 
     throw new play.exceptions.TagInternalException("src attribute cannot be empty for script tag"); 
    } 
    _src = "/public/javascripts/" + _src 
    try { 
     _abs = play.mvc.Router.reverseWithCheck(_src, play.Play.getVirtualFile(_src), false); 
    } catch (Exception ex) { 
     throw new play.exceptions.TagInternalException("File not found: " + _src); 
    } 
}% 
<script type="text/javascript" language="javascript"#{if _id} id="${_id}"#{/if}#{if _charset} charset="${_charset}"#{/if} src="${_abs}"></script> 
+0

url'@' 템플릿 태그에 경로를 넣는 것만이 아니라 작동시킬 수있는 유일한 방법입니다. 응용 프로그램을 JBoss 전쟁으로 배포 할 경우 액세스 할 수있는 정적 파일 - 이것이 내가 사용하는 이유입니다. 그것은 공식 문서에 아니지만, 일부 의견과 너무 있음 : http://stackoverflow.com/questions/7345613/how-do-i-reverse-route-a-static-file – Stefano

+0

... 그리고 어떤 이 질문에 대한 답변이되지 않을 경우 – Stefano

관련 문제