Java 如何在web应用程序中最好地实现用户可选变量

Java 如何在web应用程序中最好地实现用户可选变量,java,web-applications,variables,user-input,Java,Web Applications,Variables,User Input,我有一个基于Java的web应用程序和一个新的要求,允许用户将变量放入文本字段中,在生成文档或其他输出时替换这些字段。其他人是如何做到这一点的 我在考虑一组预定义的变量,例如: @订票号码@ @发票号@ 然后,当用户输入一些文本时,他们可以指定一个内联变量,并从模式或类似模式中选择它。例如: 这是我需要的预订@Booking\u NUMBER@的一些文本 当生成一些使用此文本的输出(例如.PDF)时,我会执行一个正则表达式,找到所有变量并用正确的值替换它们: 这是我需要的预订10001的一些文本

我有一个基于Java的web应用程序和一个新的要求,允许用户将变量放入文本字段中,在生成文档或其他输出时替换这些字段。其他人是如何做到这一点的

我在考虑一组预定义的变量,例如: @订票号码@ @发票号@

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

这是我需要的预订@Booking\u NUMBER@的一些文本

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

这是我需要的预订10001的一些文本

我最初的想法类似于Freemarker,但我认为这对我的用户来说太复杂了,需要他们知道我的数据模型eww

谢谢你的阅读


D.

我以前使用过类似的代币系统。我个人喜欢这样的东西

[我的价值]


因为用户很容易键入,然后我只需使用替换来交换真实数据的令牌。

看看java.text.MessageFormat,尤其是format方法,因为它正是为您所寻找的内容而设计的

i、 e

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

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


在这种情况下,你可能想探索一些似乎更适合这个目的的东西——这篇评论完全基于最初的调查,因为我没有在愤怒中使用它。

太复杂了。当你已经有了MessageFormat来处理它时,这听起来像是在重新设计轮子。但是,希望普通用户记住{0}是名称,{1}是预订号码是不现实的,因此需要一些对用户更有意义的东西,因此我的推荐。StringTemplate解决了命名问题,但可能会带来其他问题。需要进一步调查。
MessageFormat.format("This is some text for booking {0} that is needed by me, for use with invoice {1}", bookingNumber, invoiceNumber);