【问题标题】:illegal start of simple pattern - play framework简单模式的非法开始 - 播放框架
【发布时间】:2017-07-13 17:41:08
【问题描述】:

我是玩框架的新手。在尝试使用 play 生成 html 模板时,我在 ticket.getTicketIds 行收到错误 illegal start of simple pattern。一直在花一些时间试图解决这个问题,但没有用。

<tbody>
    @for( ticket <- @obj.getPurchasedTickets() ) {
      @for( (key,val) <- @obj.getTicketsCalculation() ) {
       @if( key.equals(ticket.getTicketId())) {
          <tr>
            <td class="desc">@ticket.getTicketName()<br></br>
            @if(ticket.getTicketIds() != null && !ticket.getTicketIds().isEmpty()) {
                @for( ticketid <- ticket.getTicketIds ){
                    #@ticketid 
                }
            }
            </td>
            <td class="unit">@ticket.getPrice()</td>
          </tr>
          }
       }
     }
 </tbody>  

以下 POJO 用于获取必要的值

public class PurchasedTicket {

  private String ticketId; // represents the ticket's id
  private String ticketName;
  private Integer numberOfTickets;
  private Double price;  
  private List<String> ticketIds; // list of tickets bought with this ticket

  // setters and getters

}

 public class Wrapper{

   private Map ticketsCalculation;
   private List<PurchasedTicket> purchasedTickets;

  // setters and getters
}

模板部分表示的obj是Wrapper类的对象

【问题讨论】:

  • ticket.getTicketIds 显示了几次。哪一个?
  • @for(ticketid
  • 它们代表字符串值。
  • 我现在看不出有什么问题。我很好奇出了什么问题。所以ticket.getTicketIdsList&lt;String&gt;,对吧?你用调试器检查了吗?不管怎样,你在重复这个方法,我认为你可以定义新变量,这样它会简化代码,也许你会看到哪里出了问题:playframework.com/documentation/2.0/…
  • getTicketIds(复数)和getTicketId(单数)两种方法,对吧?

标签: java scala playframework-2.0


【解决方案1】:

只是为了让它编译:

  1. 正如@rouge-one 提到的,您可以使用不同的变量名,例如。价值。

  2. 您不应使用多个 @ 符号。正如docs 所说,它应该用在动态语句的开头,例如。 @for( ticket &lt;- obj.getPurchasedTickets() ) {

    所以工作代码应该是这样的:

    <tbody>
        @for(ticket <- obj.getPurchasedTickets()) {
            @for((key, value) <- obj.getTicketsCalculation()) {
                @if(key.equals(ticket.getTicketId())) {
                    <tr>
                        <td class="desc">@ticket.getTicketName()<br></br>
                            @if(ticket.getTicketIds() != null && !ticket.getTicketIds().isEmpty()) {
                                @for(ticketid <- ticket.getTicketIds){
                                    #@ticketid
                                }
                            }
                        </td>
                        <td class="unit">@ticket.getPrice()</td>
                    </tr>
                }
            }
        }
    </tbody>
    

【讨论】:

    【解决方案2】:

    在模板的第 3 行将属性名称从 val 更改为 value,因为 val 是保留字。

     (key,value) <- @obj.getTicketsCalculation()
    

    例如见下文

    scala> val (key, value) =  "key1" -> "val1"
    key: String = key1
    value: String = val1
    

    scala> val (key, value) = "key1" -> "val1" 键:字符串 = key1 值:字符串 = val1

    scala> val (key, val) =  "key1" -> "val1"
    <console>:1: error: illegal start of simple pattern
    val (key, val) =  "key1" -> "val1"
              ^
    

    【讨论】:

    • 试过但问题仍然存在
    • @user3673985 您是否检查过是否存在其他 val 或类似关键字滥用的实例。尝试清理目标并从头开始重新编译。如示例所示,这就是我们如何获得“简单模式的非法开始”
    • 也试过了,但问题仍然存在:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多