向导,单击选项卡并重定向到它

问题描述

我正在使用primefaces中的向导,行为是常规的,几个选项卡,单击下一步继续下一步,单击返回返回,onflowproces等。问题是在某些情况下您可以输入以只读模式转到页面,因为在这种情况下不需要通过每一步来到达某个步骤,我想找到在选项卡中单击并重定向方法

该向导包含 8 个选项卡,每个选项卡都可以通过在 url 参数中添加选项卡的 id 来访问,我唯一要做的就是找到一种方法来单击该选项卡并重定向到该选项卡的 url .

有没有办法做到这一点?谢谢!

解决方法

为了使向导的名称作为指向其选项卡的链接,我像这样覆盖 WizardRenderer:

def _cart_id(request):
    cart = request.session.session_key
    if not cart:
        cart = request.session.create()
    return cart


def add_cart(request,product_id):
    product = Product.objects.get(id=product_id)
    try:
        cart = Cart.objects.get(cart_id=_cart_id(request))
    except Cart.DoesNotExist:
        cart = Cart.objects.create(
            _cart_id=_cart_id(request)
        )
        cart.save(),try:
        cart_item = CartItem.objects.get(product=product,cart=cart)
        if cart_item.quantity < cart_item.product.stock:
            cart_item.quantity += 1
        cart_item.save()
    except CartItem.DoesNotExist:
        cart_item = CartItem.objects.create(
            product=product,quantity=1,cart=cart
        )
        cart_item.save()
    return redirect('cart:cart_detail')

并在path('add</int:product_id/>',views.add_cart,name='add_cart'),中注册,就像这样

    package myImportantPackage;  
 
    import java.io.IOException;

    import javax.faces.component.UIComponent;
    import javax.faces.context.FacesContext;
    import javax.faces.context.ResponseWriter;

    import org.primefaces.component.tabview.Tab;
    import org.primefaces.component.wizard.Wizard;
 
  
    public class WizardRenderer extends org.primefaces.component.wizard.WizardRenderer {
             
            @Override
            protected void encodeStepStatus(FacesContext context,Wizard wizard) throws IOException {
                ResponseWriter writer = context.getResponseWriter();
                String currentStep = wizard.getStep();
                boolean currentFound = false;
         
                writer.startElement("ul",null);
                writer.writeAttribute("class",Wizard.STEP_STATUS_CLASS + " wizard-panels",null);
                int i = 0;
                for(UIComponent child : wizard.getChildren()) {
                    if(child instanceof Tab && child.isRendered()) {
                        Tab tab = (Tab) child;
                        boolean active = (!currentFound) && (currentStep == null || tab.getId().equals(currentStep));
                        String titleStyleClass = active ? Wizard.ACTIVE_STEP_CLASS : Wizard.STEP_CLASS;
                        if(tab.getTitleStyleClass() != null) {
                            titleStyleClass = titleStyleClass + " " + tab.getTitleStyleClass();
                        }
                         
                        if(active) {
                            currentFound = true;
                        }
         
                        writer.startElement("li",null);
                        writer.writeAttribute("class",titleStyleClass,null);
                        if(tab.getTitleStyle() != null) writer.writeAttribute("style",tab.getTitleStyle(),null);
                         
                        writer.startElement("a",null);
                        final String wiz = wizard.resolveWidgetVar();
                        writer.writeAttribute("href","javascript:PF('"+wiz+"').loadStep(PF('"+wiz+"').cfg.steps["+i+"],false)",null);
                        if (tab.getTitletip() != null) writer.writeAttribute("title",tab.getTitletip(),null);
                        writer.write(tab.getTitle());
                        writer.endElement("a");
                         
                        writer.endElement("li");
                        i++;
                    }
                }
         
                writer.endElement("ul");
            }    
        }