Java 如何处理JSP中的复杂性
这与其说是一个可以回答的问题,不如说是一个咆哮。我还不确定。我怀疑这可能是很多人都会遇到的情况,所以希望这是一个有用的问题 我们有JSP,它可以提供大约40种不同状态的信息。假设这是一个复杂金融产品的状态。因此,我们希望输出依赖于状态的消息,例如,状态10可能是“您的产品正在等待激活”,状态15可能是“您的产品正在激活”,等等 因此,我们似乎可以有一个简单的查找,根据状态返回适当的消息,并且所有这些都可以灵活地工作 但在现实中,光靠地位还不足以确定正确的信息。如果状态为10(待定激活),但在激活后1周内,则我们希望将消息涂成红色。如果状态为10(待定激活),但有外部原因延迟,我们需要一条消息,提供指向解释页面的链接。等等 因此,itsef的状态不能捕获确定和创建消息所需的所有信息。还有许多其他无关的信息也是必需的 按照遗留代码的工作方式,所有这些信息都加载到jsp中,然后jsp根据这些非状态信息进行确定 现在我们正在重做站点,我面临的情况是,我们需要在多个不同的位置使用相同的状态逻辑,但输出不同的包装html 简言之,这是一个大烂摊子 我认为理想的答案是重构事物,以便所有的决策都来自JSP。呃,我不知道正确的处理方法是什么。这里有很多复杂的东西,我不知道从哪里开始 我不确定我是否提供了足够的细节,甚至不能把问题弄清楚,但如果有人有任何建议,我将不胜感激Java 如何处理JSP中的复杂性,java,jsp,refactoring,jstl,Java,Jsp,Refactoring,Jstl,这与其说是一个可以回答的问题,不如说是一个咆哮。我还不确定。我怀疑这可能是很多人都会遇到的情况,所以希望这是一个有用的问题 我们有JSP,它可以提供大约40种不同状态的信息。假设这是一个复杂金融产品的状态。因此,我们希望输出依赖于状态的消息,例如,状态10可能是“您的产品正在等待激活”,状态15可能是“您的产品正在激活”,等等 因此,我们似乎可以有一个简单的查找,根据状态返回适当的消息,并且所有这些都可以灵活地工作 但在现实中,光靠地位还不足以确定正确的信息。如果状态为10(待定激活),但在激活
编辑:谢谢你的回答!代码非常复杂,我已经通过将普通代码拉入包含文件中对其进行了一些重构,这样我就可以在需要的地方包含这些文件。我肯定会按照您的建议,进一步使用函数封装东西。我很快就会回到你的答案上来。再次感谢。创建一个
Util类
,方法是通过参数接收状态、日期等。。。因此,该方法的返回将是一个对象,其中包含jsp呈现它所需的所有信息的属性。
大概是这样的:
class MyStatusUtil{
public static StatusInfo getStatusInfo(int status, Date date, etc...){
StatusInfo info = new StatusInfo();
if(status==10){
info.setStatusName("....");
}
.....
if(date==....){
info.setColor("...");
}
if(somethinElse){
info.setComment("....");
}
return info;
}
}
状态信息类:
class StatusInfo{
private String statusName;
private String color;
private String comment;
}
jsp:
您可以使用带有两个参数的自定义jstl标记吗?我相信您现有的JSP正在使用大量的
来实现最终状态消息。我建议您编写一个自定义标记,将所有Java逻辑从JSP中分离出来
处理消息内容
实现标记,使其将生成消息所需的任何内容(如产品
对象本身)作为其属性之一
WEB-INF/status.tld(标记库描述符)
然后在JSP中调用它(在任何一个页面、请求或会话范围中将Product
对象映射为“Product”),如下所示
<custom:statusMesg product="${product}" />
处理消息呈现(视图)
您需要决定消息呈现颜色的部分应使用CSS
样式表进行处理。您可以让自定义标记确定消息优先级,然后使用适当的CSS样式类返回消息,如
<span class="priorityHigh">Needs activation within 1 week</span>
不管谁否决了投票给我。。。你能至少解释一下原因吗?
pubic class StatusMesgTag extends SimpleTagSupport {
private Product product;
public void setProduct(Product product) {
this.product = product;
}
public void doTag() throws JspException, IOException {
StringBuilder statusMesg = new StringBuilder();
// process Product info to generate mesg
getJspContext().getOut().println(statusMesg);
}
}
<custom:statusMesg product="${product}" />
<%@ taglib prefix="custom" uri"WEB-INF/status.tld" %>
<span class="priorityHigh">Needs activation within 1 week</span>
.priorityHigh {color: red};
.priorityNormal {color: black};
.priorityLow {color: green};