Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在grails/java中向不同的用户类型显示不同的消息_Java_Grails - Fatal编程技术网

如何在grails/java中向不同的用户类型显示不同的消息

如何在grails/java中向不同的用户类型显示不同的消息,java,grails,Java,Grails,我正在为应用程序流程编写一系列网页向导。向导有30页长。有4种不同类型的用户。根据用户类型,他们可能会在表单的每个页面中看到不同的静态文本,或者在表单上看到不同的字段。也就是说,4种用户类型x30个页面=总共120个网页。4个向导用户界面中85%相同。不同的页面以及不同的用户类型之间的差异是不同的,所以我不能有25个通用向导页面,每个用户类型有5个唯一的页面 我试图写代码,这样我就不会有30页重复4次。我使用的是grails模板,因此我只有30个页面可以根据用户类型引入差异。我的一个想法是借助g

我正在为应用程序流程编写一系列网页向导。向导有30页长。有4种不同类型的用户。根据用户类型,他们可能会在表单的每个页面中看到不同的静态文本,或者在表单上看到不同的字段。也就是说,4种用户类型x30个页面=总共120个网页。4个向导用户界面中85%相同。不同的页面以及不同的用户类型之间的差异是不同的,所以我不能有25个通用向导页面,每个用户类型有5个唯一的页面

我试图写代码,这样我就不会有30页重复4次。我使用的是grails模板,因此我只有30个页面可以根据用户类型引入差异。我的一个想法是借助grails内置的国际化。例如,如果我有一个角色为role_Finance的用户,他们的向导将从messages.properties中提取要显示的文本。如果我有一个角色为role_Contractor的用户,我可以为他们分配不同的语言环境(西班牙语),以便向导从消息_es.properties中提取不同的文本


虽然我意识到这不是grails国际化的目的,但这似乎是一个干净的解决方案。这不是一个国际应用程序,所以我不担心失去该功能。以前任何人都必须这样做,才能找到更好的解决方案?

而不是在滥用i18n的情况下尝试使用不同的语言环境,而是将用户的角色添加到消息键中,就像doelleri所说的那样,您可以灵活地构建消息键

如果消息依赖于用户角色,则可以通过角色名称扩展消息键。例如,您可以这样定义消息键:

step1.welcome.Role_Finance=Hello Finance
step1.welcome.Role_Contractor=Hello Contractor
并根据用户角色解决这些问题

<g:message code="step1.welcome.${ user.getRole() }" />


如果你有很多这样的消息,你也可以考虑创建一个特殊的消息标签,自动添加角色。

这听起来不错,直到我开始实现它。然后我在springsecurity中意识到用户对象有一组角色。我可以检查第一个角色,但如果我以后向user对象添加更多角色,则可能会导致问题。而不是向user类添加另一个返回用户“类型”的方法。您可以在此方法中检查角色或任何其他内容。或者想想你的设计,也许spring安全角色不是区分用户的最佳方式。