【问题标题】:How best to implement user selectable variables in web application如何最好地在 Web 应用程序中实现用户可选变量
【发布时间】:2010-09-19 14:34:15
【问题描述】:

我有一个基于 Java 的 Web 应用程序和一个新要求,即允许用户将变量放入文本字​​段中,这些文本字段在生成文档或其他输出时会被替换。其他人是怎么做的?

我正在考虑使用一组预定义的变量,例如:
@BOOKING_NUMBER@
@INVOICE_NUMBER@

然后,当用户输入一些文本时,他们可以指定一个内联变量(从模式或类似中选择它)。例如:

“这是我需要的 Booking @BOOKING_NUMBER@ 的一些文本”

当生成一些使用此文本的输出(例如 PDF)时,我会做一个正则表达式并找到所有变量并将它们替换为正确的值:

“这是我需要的 Booking 10001 的一些文本”

我最初的想法是类似于 Freemarker,但我认为这对我的用户来说太复杂了,需要他们知道我的 DataModel (eww)。

感谢阅读!

D.

【问题讨论】:

    标签: java web-applications variables user-input


    【解决方案1】:

    我以前使用过类似的替换令牌系统。我个人喜欢类似的东西。

    [我的价值]

    因为用户很容易输入,所以我只是使用替换来将标记换成真实数据。

    【讨论】:

    • 太复杂了。当您已经拥有处理它的 MessageFormat 时,这听起来像是在重新发明轮子。
    • 但是希望普通用户记住 {0} 是姓名而 {1} 是预订号是不切实际的,因此需要一些对用户更有意义的东西,因此我的建议.
    • StringTemplate 解决了命名问题,但可能会引入其他问题。需要进一步调查。
    【解决方案2】:

    看看 java.text.MessageFormat - 特别是格式方法 - 因为它是专为您正在寻找的东西而设计的。

    MessageFormat.format("This is some text for booking {0} that is needed by me, for use with invoice {1}", bookingNumber, invoiceNumber);
    

    您甚至可能希望从资源包中获取模板文本,以支持多种语言,并增加处理 {0} 和 {1} 在某些情况下可能以不同顺序出现的事实的能力语言。

    更新: 我刚刚正确阅读了您的原始帖子,并注意到有关 PDF 的评论。 这表明模板文本将明显大于一两行。

    在这种情况下,您可能想要探索类似 StringTemplate 之类的内容,它似乎更适合此目的 - 此评论仅基于初步调查,因为我没有在愤怒中使用它。

    【讨论】:

      猜你喜欢
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      相关资源
      最近更新 更多